解释意外的程序输出

时间:2015-06-07 05:22:12

标签: java

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

为什么我会收到这个意外的输出?我该如何解决?

3 个答案:

答案 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=0x=2

最后case x-2:成真

output: 2

第二次迭代:

z=1x=2

case x-1:成真,但最后一个案例也被触发

output: 2 1 2

第三次迭代:

z=2x=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语句,则也会执行后面的案例。