2013-10-15 91 views
0

请阅读以下功能:与Java开关奇怪的输出

public static int getValue(int i) { 
    int result = 0; 
    switch (i) { 
     case 1: 
      result = result + i; 
     case 2: 
      result = result + i * 2; 
     case 3: 
      result = result + i * 3; 
    } 
    return result; 
} 

i = 2,什么是输出?我认为它是4,但答案是执行10。为什么会发生?为什么案例3也执行? i是2,而不是3.我想要考虑它,但我仍然不知道为什么会发生这种情况。

回答

1

使用break避免下一个案件的执行。

public static int getValue(int i) { 
     int result = 0; 
     switch (i) { 
     case 1: 
      result = result + i; 
      break; 
     case 2: 
      result = result + i * 2; 
      break; 
     case 3: 
      result = result + i * 3; 
      break; 
     } 
     default: 
      break; 
     return result; 
    } 
+0

+1为清除/完整答案。请提及提供默认情况是(通常/总是)一个好主意。 – ChuckCottrill

11

对于每种情况,开关语句都需要break;以避免执行后面的case语句。

0

case语句需要一个break语句来阻止它进入下一个case语句。

也很好有一个默认的情况下

switch (i) { 
    case 1: 
     result = result + i; 
     break; 
    case 2: 
     result = result + i * 2; 
     break; 
    case 3: 
     result = result + i * 3; 
     break; 
    default: 
     log.error (...); 

} 
1

你忘了'break; switch语句。
它应该是这个样子,当你完成:

case 1: 
    //code 
    break; 
case 2: 
    //code 
    break; 

而且它总是好的,包括defualt情况:

default: 
    System.err.println("Something went terribly wrong!"); 

抱歉,如果这之前已经发布,这样就可以解决一切。
我还有一个原因至于为什么发生了什么事情发生: 结果正在从案例1保存,并重新使用新的价值。这是你的错误。

0

使用“break;”来防止代码自动运行到下一个案例。

switch (choice) 
{ 
case 0: 
    //codes 
    break; 
case 1: 
    //codes 
    break; 
case 2: 
    //codes 
    break; 
case 3: 
    //codes 
    break; 
}