Java “为什么是错误的?”;案例;在「;“违约”;在switch语句中

Java “为什么是错误的?”;案例;在「;“违约”;在switch语句中,java,Java,如何可能输出为1002,为什么尽管存在不匹配,仍要执行最后一个案例 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.

如何可能输出为1002,为什么尽管存在不匹配,仍要执行最后一个案例

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

因为您缺少
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;
    }

j
将具有值
1000
,即使
默认值
早于
案例15

您必须在案例块末尾中断。否则,所有后续案件也将被执行

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);
}
}
漏洞:

另一个有趣的问题是break语句。每个中断语句 终止封闭的switch语句。控制流继续进行 开关块后面的第一条语句。中断语句 是必要的,因为如果没有它们,开关块中的语句将失败 通过:在中执行匹配案例标签后的所有语句 序列,无论后续大小写标签的表达式如何, 直到遇到break语句

您的代码应该是:

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


您没有在每个案例中指定“break”关键字

应该是这样的:

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

在这种情况下,情况2和情况4不是执行,而是默认值,情况15是,因此答案是1002。请输入中断语句以获得所需的结果

希望这有帮助

This is the output from the code:

August
September
October
November
December
switch (i){
    case 2 : 
    j++;
    break;
    case 4:
    j+=10;
    break;
    case 15 : 
    j+=1000;
    break;
    default: 
    j+=2;
    break;
}