你是代码没保存吧, 不跳出继续执行是遇到你对应的case之后,如果没有break那么就会继续执行之后的case,而遇到匹配项之前的case是不执行的,可以参考下边的看看
switch (2) {
case 1:
System.out.println("111");
case 2:
System.out.println("222");
case 3:
System.out.println("333");
default:
System.out.println("555");
case 4:
System.out.println("444");
}
输出
222
333
555
444
default要写在后面,否则不会进入下面的标号
break在switch语句中,是人为添加的,而不是默认的,对每个case分支都是可选的,也就是说,有些可以有,有些可以没有。因为有了这样的特性,编程变得更灵活。
例1:当不使用break时,当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。
#include <stdio.h>
int main(void){
int i;
printf("input integer number: ");
scanf("%d",&i);
switch (i){
case 1:printf("Monday\n");
case 2:printf("Tuesday\n");
case 3:printf("Wednesday\n");
case 4:printf("Thursday\n");
case 5:printf("Friday\n");
case 6:printf("Saturday\n");
case 7:printf("Sunday\n");
default:printf("Error\n");
}
return 0;
}
这恰恰反应了switch语句的一个特点,在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。
例2:当使用break语句时,这样使得每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。
#include <stdio.h>
int main(void){
int i;
printf("input integer number: ");
scanf("%d",&i);
switch (i){
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n"); break;
case 4:printf("Thursday\n"); break;
case 5:printf("Friday\n"); break;
case 6:printf("Saturday\n"); break;
case 7:printf("Sunday\n"); break;
default:printf("Error\n");
}
return 0;
}
根据代码和资料分析,switch语句中缺少break语句,导致执行完某条case分支后继续执行后面的case分支。应该在每个case分支的最后添加break语句,以避免出现这种情况。例如:
switch (i){
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n"); break;
case 4:printf("Thursday\n"); break;
case 5:printf("Friday\n"); break;
case 6:printf("Saturday\n"); break;
case 7:printf("Sunday\n"); break;
default:printf("Error\n");
}
另外,如果有多个case分支需要执行相同的操作,此时可以连续列出这些分支,在最后一个分支添加break语句即可。例如:
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}