0

输出怎么可能是 1002,为什么最后一个 case 不匹配却被执行?

public class Main {
    public static void main(String[] args) {
        int i=0,j=0;
        switch (i) {
            case 2 : j++;
            default: j+=2;
            case 15 : j+=1000;
        }
        System.out.println("j="+j);
    }
}
4

5 回答 5

8

失败:

另一个有趣的地方是 break 语句。每个 break 语句都会终止封闭的 switch 语句。控制流继续 switch 块之后的第一条语句。break 语句是必要的,因为没有它们,switch 块中的语句就会失败:匹配 case 标签之后的所有语句都按顺序执行,无论后续 case 标签的表达式如何,直到遇到 break 语句。

您的代码应该是:

  case 2 : j++; break;
  case 4:  j+=10; break;
  default: j+=2; break;
  case 15: j+=1000;
}

FROM DOCS

public class Example{

public static void main(String[] args) {
    java.util.ArrayList<String> futureMonths =
        new java.util.ArrayList<String>();

    int month = 8;

    switch (month) {
        case 1:  futureMonths.add("January");
        case 2:  futureMonths.add("February");
        case 3:  futureMonths.add("March");
        case 4:  futureMonths.add("April");
        case 5:  futureMonths.add("May");
        case 6:  futureMonths.add("June");
        case 7:  futureMonths.add("July");
        case 8:  futureMonths.add("August");
        case 9:  futureMonths.add("September");
        case 10: futureMonths.add("October");
        case 11: futureMonths.add("November");
        case 12: futureMonths.add("December");
        default: break;
    }

    if (futureMonths.isEmpty()) {
        System.out.println("Invalid month number");
    } else {
        for (String monthName : futureMonths) {
           System.out.println(monthName);
        }
    }
}

}

This is the output from the code:

August
September
October
November
December
于 2013-06-07T08:53:05.200 回答
1

您必须在案例块的末端打破。否则所有后续案例也将被执行。

public class Main {
public static void main(String[] args) {
    System.out.println("Hello World!");
    int i=0,j=0;
    switch (i){
        case 2 : j++; break;
        case 4: j+=10; break;
        case 15 : j+=1000; break;
        default: j+=2;
    }
    System.out.println("j="+j);
}
}
于 2013-06-07T08:52:08.150 回答
0

因为你不见了break;

如果我理解您的困惑,默认顺序无关紧要。在以下情况下,

    int i=15,j=0;
    switch (i){
        case 2 : 
            j++;
            break;
        case 4: 
            j+=10;
            break;
        default: 
            j+=2;
            break;
        case 15 : 
            j+=1000;
            break;
    }

j1000即使default是以前也会有价值case 15

于 2013-06-07T08:51:57.433 回答
-1

您没有在每种情况下都指定“break”关键字。

应该是这样的:

switch (i){
    case 2 : 
    j++;
    break;
    case 4:
    j+=10;
    break;
    case 15 : 
    j+=1000;
    break;
    default: 
    j+=2;
    break;
}
于 2013-06-07T08:53:06.813 回答
-1

在这种情况下,案例 2 和案例 4 不执行,但默认情况下和案例 15 是,所以答案是 1002。请输入 break 语句以获得所需的结果。

希望这可以帮助。

于 2013-06-07T08:55:57.893 回答