0

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

例如:

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

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

4

4 回答 4

5

为什么不只使用一个default分支:

switch (n) {
  // cases for which you need custom behavior...
  default:
    // use n for the general case
}
于 2013-01-11T19:41:15.697 回答
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(),但这是为了说明)

于 2013-01-11T19:58:25.230 回答
0

当您看到一个包含 32 种情况的 switch 语句以及一个可能需要经常扩充的语句时,它通常表示代码或设计有“气味”。您可能必须在代码的多个位置复制此开关结构,然后您将以高昂的维护成本和违反开放/封闭原则单一责任原则的脆弱代码告终(作为需求的单一更改)可能会迫使您在多个位置随机编码)。

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

于 2013-01-11T19:56:32.327 回答
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
}
于 2013-01-12T00:12:29.487 回答