Java Switch语句

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

  • 对于A,我想做statement_1和statement_3。
  • 对于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? } 

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

更新1:

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

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

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

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

    }

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

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

对于Update-3:

为这10行创建方法:

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

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

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

你可以这样做:

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

为什么不将开关嵌套到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; 

我经常发现介绍enum增加了清晰度。 在这里,我想每个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(); } 

请注意,您可以使用其他问题的解决方案来处理某些问题(参见我的enum )。

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

 switch (variable){ case A: handleCaseA(); break; case B: handleCaseB(); break; default: handleDefaultCase(); break; } 
 switch (variable) { case A: do statement_1; do statement_3; break; case B: do statement_2; do statement_3; break; } 

中断可以节省大量执行时间,因为它“忽略”了交换机块中所有其余代码的执行

 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"); } } } 

输出为10

这里你必须以这种方式使用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"); }