public class Test {
final static int x = 2;
public static void main(String [] args) {
for (int z=0; z < 3; z++) {
switch (z) {
case x: System.out.print("0 ");
case x-1: System.out.print("1 ");
case x-2: System.out.print("2 ");
}
}
}
}
我有一个名为X的变量,它保存值2但是我的输出是2 1 2 0 1 2
。
为什么我会收到这个意外的输出?我该如何解决?
答案 0 :(得分:2)
如果您调试代码(我强烈推荐!),您会看到在编写switch语句时不会破坏案例(在每种情况结束时使用break
关键字),它会从案例分析。
在您的代码中,x
始终等于2,因此在第一次运行时,只会遇到最后一种情况并打印出2
。
在第二次迭代中,当z=1
时,符合中间案例,因此您打印1
。但是,由于您没有中断,它会继续执行下一个案例的代码,再次打印2
。
在第三次也是最后一次迭代中,z=2
和第一种情况得到满足,但由于您永远不会break;
,所有情况都会被执行并且您打印0 1 2
。
答案 1 :(得分:2)
switch
语句将保存变量z
,其值范围为0 to 2
作为循环定义;
现在,当z
的值与任何case
匹配时,它所具有的代码也将在任何情况下运行时运行,由于缺少break
语句,所有以下情况也会运行
第一次迭代:
z=0
,x=2
最后case x-2:
成真
output: 2
第二次迭代:
z=1
,x=2
case x-1:
成真,但最后一个案例也被触发
output: 2 1 2
第三次迭代:
z=2
,x=2
case x:
也会生效,以下两种情况也会被触发
output: 2 1 2 0 1 2
public class Test
{final static int x = 2;
public static void main(String [] args){
for (int z=0; z < 3; z++){
switch (z){
case x: // it appears case 2:
System.out.print("0 ");
// break; you need break statement here
case x-1: //it appears to be case 1:
System.out.print("1 ");
// break; you need break statement here
case x-2: // it appears to be case 0:
System.out.print("2 ");
// break; you need break statement here
}}}}
答案 2 :(得分:0)
你必须在每个案例之后放置一个break语句,其原因是因为当任何一个案例变为true时,如果没有break语句,则也会执行后面的案例。