实施一般开关案例[关闭]

问题描述 投票:0回答:4

我想用Java创建一个通用的switch case语句。我正在制作一个程序,在某些时候我必须为switch语句创建32个不同的情况,例如:case 0 : , case 1 : , .... case 31 :。然后在每种情况下我都要编写一些代码行。有没有办法实现一般的switch case语句,这样我就不必编写32个单独的case?

例如:

switch(n){
case k :
.....
{

我怎样才能在java中实现它?可能吗?

java switch-statement
4个回答
5
投票

为什么不使用default分支:

switch (n) {
  // cases for which you need custom behavior...
  default:
    // use n for the general case
}

1
投票

你可以使用枚举。例如,这是一个枚举,它将数字的名称与其整数值进行匹配:

enum MyDigit
{
    ZERO(0),
    ONE(1),
    TWO(2),
    // etc
    NINE(9);

    private final int intValue;

    MyDigit(int intValue)
    {
        this.intValue = intValue;
    }

    public int intValue()
    {
        return intValue;
    }
}

枚举非常灵活。例如,您还可以构建所有值的反向映射,并使用静态查找方法来获取枚举的所需值。

(是的,有些人会说整数值在这里是多余的,因为我可以使用values() / ordinal(),但这只是为了说明)


0
投票

当你看到32个案例的switch语句和一个可能经常需要增强的案例时,它通常会发出code or design "smell"的信号。您可能需要在代码的多个位置复制此交换机结构,然后您将以高维护成本和违反Open/closed PrincipleSingle Responsibility Principle的脆弱代码结束(因为需求中的单个更改可能会迫使您有机会代码在多个位置)。

解决此问题的方法是将代码分解为多个类以利用polymorphism。当你进行分解时,你必须考虑Design Pattern将为你提供最合适的switch语句替换。一些潜在的候选人(因为我不知道你的代码的性质)是:CommandStrategyVisitor;但也有其他人。


0
投票

在每种情况下,我必须写2行,它们的变量取决于案例...所以在案例0,我将要使用的变量是0 * L(l是我想要的值的变量,首先是L = 8)...然后情况1是1 * L ...情况2:2 * L,依此类推

好吧,检查你的输入数字是0到32之间的数字,然后只做n * L.

int result = 0;
if(n>=0&&n<32){
    result=n*L;
}else{
    System.err.println("wrong number");
    //or do whatever you have to
}
© www.soinside.com 2019 - 2024. All rights reserved.