Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实现一个通用的开关箱_Java_Switch Statement - Fatal编程技术网

Java 实现一个通用的开关箱

Java 实现一个通用的开关箱,java,switch-statement,Java,Switch Statement,我想用Java创建一个通用的switch case语句。 我正在编写一个程序,在某个时刻,我必须为switch语句编写32种不同的情况,比如:case 0:,case 1:。。。。案例31:。然后在每种情况下我都要写几行代码。有没有办法实现一个通用的switch case语句,这样我就不必编写32个单独的case 例如: switch(n){ case k : ..... { 如何在java中实现这一点?可能吗?为什么不使用默认分支: switch (n) { // cases for w

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

例如:

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

如何在java中实现这一点?可能吗?

为什么不使用
默认分支:

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

为什么不使用
默认分支:

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

当您看到一个包含32种情况的switch语句和一个可能需要经常扩充的语句时,它通常表示一个错误。很可能您必须在代码的多个位置复制此交换结构,然后您将以高昂的维护成本和违反和的脆弱代码结束(因为需求中的单个更改可能会迫使您在多个位置使用chance代码)


这个问题的一个解决方案是将代码分解成多个类来利用。当您处理分解时,您必须考虑什么可以为您的switch语句提供最合适的替换。一些潜在的候选者(因为我不知道代码的性质)是:;但是也有其他的情况。

当你看到一个包含32种情况的switch语句,并且一个可能需要经常扩充的语句时,它通常表示一个错误。很可能您必须在代码的多个位置复制此交换结构,然后您将以高昂的维护成本和违反和的脆弱代码结束(因为需求中的单个更改可能会迫使您在多个位置使用chance代码)


这个问题的一个解决方案是将代码分解成多个类来利用。当您处理分解时,您必须考虑什么可以为您的switch语句提供最合适的替换。一些潜在的候选者(因为我不知道代码的性质)是:;但是还有其他的。

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

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()
,但这只是为了说明)

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

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()
,但这只是为了说明)

在每种情况下,我必须写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
}
int结果=0;
如果(n>=0&&n
在每种情况下,我必须写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
}
int结果=0;


如果(n>=0&&n在每种情况下,代码之间的差异是什么?@ashburaczenko在每种情况下,我必须写2行,它们的变量取决于情况…因此在情况0,我稍后将使用的变量是0*L(L是我想要的变量,首先是它的L=8)…那么案例1是1*L…案例2:2*L,依此类推从您的描述来看,似乎您可以用
n*L
表达式替换
case
。如果您不想编写每个案例,因为变量发生了变化,那么切换将不适用于您。fge-answer可能是一种实现您所需的方式。@TomaszNurkiewicz是的,但正如我在每个案例之前所说的那样作为两行代码..我的意思是我有另一个依赖于k的变量,除了L..另一个变量是k*L-1。在每种情况下,代码之间的区别是什么?@Ashburaczenko在每种情况下,我必须写两行代码,它们的变量取决于情况…所以在情况0,我稍后将使用的变量是0*L(l是我想要的变量值,首先它的l=8)…那么案例1是1*L…案例2:2*L,依此类推从您的描述来看,似乎您可以用
n*L
表达式替换
case
。如果您不想编写每个案例,因为变量发生了变化,那么切换将不适用于您。fge-answer可能是一种实现您所需的方式。@TomaszNurkiewicz是的,但正如我在每个案例之前所说的那样作为两行代码..我的意思是,我有另一个依赖于k的变量,除了L..另一个变量是k*L-1.因为在每种情况下,我都有一个依赖于案例编号的变量..案例0:0*L案例1:1*L等等on@Joni如果这确实是问题所在,那么写下
n*L
。否则请解释得更好。是的。这听起来像你根本不应该使用
开关
——你应该在你的代码中计算
n*L
。@Joni:那么如果你需要计算
k*L-1
,那该怎么办?只要写
k*L-1
。你解释过的原因都不是需要
开关
语句的正当理由。如果你真的给我们看了真正的代码如果您试图编写,我们可以为您提供更简单的真实代码。整个
switch
语句都可以重放