首页 文章

Java Switch语句

提问于
浏览
13

当我试图处理特殊情况时,我在使用switch语句时遇到问题 . 例如,我有3个案例:A,B,C .

  • 对于A,我想做statement_1和statement_3 .

  • for B,我想做statement_2和statement_3 .

  • 对于C,我什么都不想做

如果我使用if-else语句,它将如下所示:

if ( not C){
    do statement_3

   if B
      do statement 2
   else if A
      do statement 1

 }

如果我想使用switch语句做同样的事情,我有一些麻烦 .

switch (variable){
case A:  do statement_1
case B: do statement_2
// how to do statement 3 here?  
}

我试图避免重复的代码 . 所以我在想如何使代码尽可能简单 .

UPDATE 1:

  • 使我的代码/问题更加清晰,我只想让我的代码尽可能简单/清晰,这就是为什么我想使用switch语句而不是if-else . 另外,我听说switch语句通常比if-else更快 . (虽然我不是100%肯定) .

  • 我想使用switch-case,因为案例A,B,C是枚举类型 . 它们不是变数 . 对此感到抱歉 .

  • 每个语句都超过10行代码 . 这就是为什么我不想做以下事情:

switch (enum variable) {
case A:
  statement1
  statement3
 break;
case B:
  statement2
  statement3
 break;

}

8 回答

  • 1

    你可以这样做:

    switch (variable){
      case A:  do statement_1; do statement_3; break;
      case B:  do statement_2; do statement_3; break;    
    }
    
  • 3

    我经常发现引入 enum s增加了清晰度 . 在这里,我想每个 enum 是一个可以通过许多过程解决的问题:

    enum Issue {
      A {
        void handleIt () {
          statement_1();
          statement_3();
        }
      },
      B {
        void handleIt () {
          statement_2();
          statement_3();
        }
      },
      C {
        void handleIt () {
          // Do nothing.
        }
      },
      D {
        void handleIt () {
          A.handleIt();
          B.handleIt();
        }
      };
    
      abstract void handleIt();
    }
    

    请注意,您可以使用其他问题的解决方案来处理某些问题,这样可以获得额外的好处(请参阅我的 D enum ) .

  • 0
    switch (variable) {
    case A:  
    do statement_1;
    do statement_3;
    break;
    case B:
    do statement_2;
    do statement_3;
    break;
    }
    
  • 26

    为什么不将开关嵌套到if语句中?这种方式没有重复代码 .

    if(!C){
        statement_3;
        switch(variable){
        case A:
            statement_1;
            break;
        case B: 
            statement_2;
            break;
    }
    

    或者使用if语句和switch?

    if(!C){
        statement_3;
    }
    switch(variable){
    case A:
        statement_1;
        break;
    case B: 
        statement_2;
        break;
    
  • 0

    在这里你必须以这种方式使用 if statement ,因为在 switch 中通常也有 default 值 .

    if (letter == 'A' || letter == 'B') { System.out.println("Statement 3 ");}
     switch (letter) {
                case 'A':
                    System.out.println("Statement 1 ");
                    break;
    
                case 'B':
                    System.out.println("Statement 2 ");
                    break;
    
                case 'C':
                    System.out.println();
                    break;
                default:
                    System.out.println("You entered wrong value");
            }
    
  • 0

    我建议准确定义应该执行的staments:

    switch (variable){
        case A: 
            statement_1();
            statement_3();
            break;
        case B: 
            statement_2();
            statement_3();
            break;
    }
    

    for Update-3:

    为这10行创建方法:

    public void statement_1() {
        //your 10 lines of code
    }
    

    如果你总是执行statement_3,除了案例C,你可以在编写时使用if / else-blocks .

    但在我的诚实意见中:如果你有少量的案例,确切地定义在哪种情况下必须做什么 . 对别人来说更容易阅读

  • 0

    如果一个案例有超过2-3个语句,那么从可读性和清晰代码的角度来看,它们可以作为单独的方法提取它们:

    switch (variable){
        case A: handleCaseA(); break;
        case B: handleCaseB(); break;
        default: handleDefaultCase(); break;
    }
    
  • 0

    A break can save a lot of execution time because it "ignores" the execution of all the rest of the code in the switch block

    public class SwitchExample {  
    public static void main(String[] args) {  
        int number=10;  
        switch(number){  
        case 10: System.out.println("10");break;  
        case 20: System.out.println("20");break;  
        case 30: System.out.println("30");break;  
        default:System.out.println("Not in 10, 20 or 30");  
        }  
    }  
    }
    

    Output is 10

相关问题