当前位置: 首页 > 知识库问答 >
问题:

Java开关盒故障

苏胤
2023-03-14

我在Java中有一个开关盒,如下所示:

switch(int example)
{
   case 1: //Do different
      break;
   case 2: //Do different 
      break;
   /** For int more than 2, then I need
       for it to do something same.
   */
   case 3://Do different and case6
      break;
   case 4://Do different and case6
      break;
   case 5://Do different and case6
      break;
   case 6:
      break;
}

SAN有一个特殊的case 6函数,case 3-5调用该函数,这样做的优雅方式是什么?(我在这里使用int,但这是一个例子,所以我不能使用if(int)


共有3个答案

胡禄
2023-03-14

我不确定它是否优雅,但一种方法是有两个开关块:

switch(int example)
{
   case 1: //Do different
      break;
   case 2: //Do different 
      break;
   case 3:
      // Do whatever
      break;
   case 4:
      // Do whatever
      break;
   case 5:
      // Do whatever
      break;
}

switch(int example)
{
   case 3:
   case 4:
   case 5:
   case 6:
      // Do whatever (case 3-5 fall through)
      break;
}
乜璞瑜
2023-03-14

我能想到的一种方法是将代码移动到不同的函数。像这样的。

void case1(){
    // do something
}
...
void case3(){
   // do something
    case6();
}
...
void case6(){
   // do something
}

// This switch is in some other method.
switch(int example)
{
   case 1: //Do different
      case1();
      break;
   ...
   case 3://Do different and case6
      case3(); //internally calls case 6
      break;
   ...
   case 6:
      case6();
      break;
}

或者,您甚至可以为每个案例使用不同的方法,并在案例3:中调用case3()case6()方法。无论哪种方式,方法解决方案都会起作用,而且IMHO会更优雅一些,并且有多个switch语句。

拓拔骁
2023-03-14

开关并不能完全按照你的要求去做。不过,您可以使用嵌套开关构造如下内容:

outer_switch: switch (example) {

    case 1: System.out.println("1");
            break;

    case 2: System.out.println("2");
            break;

    default: {
        switch (example) {

            case 3: System.out.println("3");
                    break;

            case 4: System.out.println("4");
                    break;

            case 5: System.out.println("5");
                    break;

            case 6: System.out.println("6");
                    break;

            default: break outer_switch;
        }

        System.out.println("not 1 nor 2");
    }
}

请注意标有“断开”的outer_开关,如果示例不符合任何内部情况,这是一种绕过共享代码的方法。

 类似资料:
  • 本文向大家介绍dart 开关盒,包括了dart 开关盒的使用技巧和注意事项,需要的朋友参考一下 示例 Dart有一个可用于代替长if-else语句的开关盒: 您只能比较整数,字符串或编译时常量。被比较的对象必须是同一类的实例(而不是其任何子类型的实例),并且该类不得覆盖==。 Dart中switch的一个令人惊讶的方面是非空case子句必须以break结尾,或者更不常见的是continue,thr

  • 我正在编写一个程序,接收用户的出生信息,年、月、日、时、分。该计划如下: 使用< code>getRangedInt方法输入一个人出生的年份(1965-2000)、月份(1-12)、日期*、小时(1-24)、分钟(1-59)。 注意:使用switch()条件选择器结构将用户限制在其出生月份的正确天数内。例如,如果他们出生在2月[1-29]日、10月[1-31]日。提示:这里只有几个组,而不是12个

  • 问题内容: 苹果文档说 每个switch语句必须详尽无遗。也就是说,所考虑类型的每个可能值都必须与切换条件之一匹配。 所以在新的Xcode中,我放置了这样的代码 现在,如果我删除默认部分,则会出现编译器错误: 切换必须详尽无遗 是否要添加丢失的案例?固定 所以我的问题是我提到的一个案例,因为我没有提到??的所有案例值。但是我仍然遇到错误?为什么会出现此错误,我错过了什么吗? 问题答案: Swift

  • 问题内容: 我试图用谷歌搜索,但是没有运气。 我的开关很大,有些情况 显然 比其他情况 更常见 。 因此,我想知道订单是否真正保持原状,并且在“下”之前先测试“上”案例,因此可以更快地进行评估。 我想保留订单,但是如果它影响速度,那么重新排序分支将是一个好主意。 例如: 问题答案: 对switch语句重新排序没有任何效果。 查看Java字节码规范,可以将a编译为a 或一条指令,然后打开a 。A 总

  • 我试图谷歌这个,但运气不好。 我有一个很大的转变,有些病例明显比其他病例更常见。 所以我想知道订单是否真的保持原样,并且“上层”案例在“下层”案例之前得到测试,因此评估得更快。 我想保留我的订单,但如果这会影响速度,那么重新排序分支将是一个好主意。 举例说明:

  • 我尝试使用switch方法来计算字符串中元音和辅音的数目。这个问题在网上有很多,但我必须确保像(!,$,&)这样的字符,数字和空格不包括在辅音中。 我有这个自动取款机。 我如何将默认值更改为只允许a和Z之间的字符的特定大小写?