0

请阅读以下功能:

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。我正在尝试考虑它,但我仍然不知道为什么会发生这种情况。

4

5 回答 5

11

break;每个 case都需要 switch 语句,以避免执行后面的 case 语句。

于 2013-10-15T02:30:28.113 回答
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;
    }
于 2013-10-15T02:32:55.597 回答
1

你忘记了` break; 开关语句。
完成后它应该看起来像这样:

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

此外,包含一个默认案例总是好的:

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

抱歉,如果之前已经发布过,这应该可以解决所有问题。关于为什么会发生这种情况,
我也有一个原因:结果是从案例 1 中保存的,并与新值一起重用。这是你的那个时髦的错误。

于 2013-10-15T02:38:08.967 回答
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 (...);

}
于 2013-10-15T02:31:34.623 回答
0

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

switch (choice)
{
case 0:
  //codes
  break;
case 1:
  //codes
  break;
case 2:
  //codes
  break;
case 3:
  //codes
  break;
}
于 2013-10-19T12:49:20.993 回答