为什么开关盒无法正常工作?

时间:2018-07-06 12:56:02

标签: java switch-statement

class Main {
    public static void main(String[] args)
    {
        System.out.println("value =" + switchIt(4));
    }
    public static int switchIt(int x)
    {
        int j = 1;
        switch (x)
        {
            case 1: j++;
            case 2: j++;
            case 3: j++;
            case 4: j++;
            case 5: j++;
            default: j++;
        }
        return j + x;
    }
}

Output = 8

我希望输出为6。 我认为switchIt()函数中的静态返回类型正在发生某些事情。 我不明白怎么办?

预先感谢

4 个答案:

答案 0 :(得分:1)

案例中没有break,因此执行将失败。让我们跟踪执行情况:

j从1开始。由于x4,所以我们跳到case 4:,执行j++-j现在是{{ 1}}。然后,它进入2,执行case 5:,而j++现在是j。同样,它进入3,执行另一个case default,并将j++带到j。最后,我们返回4x+j的{​​{1}}。

答案 1 :(得分:1)

4+4的工作原理

  • 您进入8,它对应于赋予Switch/case的值
  • 然后继续处理下一个案例直到,您发现一个case

在您之中:

  • 您转到switch => break变成case 4
  • 然后转到j => 2变成case 5
  • 然后它进入j => 3变成default
  • j,即4

您期望的return 4+4将由

给出
8

答案 2 :(得分:1)

如@YCF_L所述,您缺少break;关键字。

如果您不间断地构建开关柜,则意味着以下所有情况也将执行。交换条件基本上执行匹配的条件,然后继续进行直到找到break语句。

要更正它,您的开关应如下所示:

class Main {
    public static void main(String[] args)
    {
        System.out.println("value =" + switchIt(4));
    }
    public static int switchIt(int x)
    {
        int j = 1;
        switch (x)
        {
            case 1: 
               j++;
               break;
            case 2: 
               j++;
               break;
            case 3: 
               j++;
               break;
            case 4: 
               j++;
               break;
            case 5: 
               j++;
               break;
            default:
               j++;
               break;
        }
        return j + x;
    }
}

答案 3 :(得分:0)

您需要添加中断;声明。 break语句在交换机内部用于终止可选的语句序列。如下更改代码:

 class Main {
        public static void main(String[] args)
        {
            System.out.println("value =" + switchIt(4));
        }
        public static int switchIt(int x)
        {
            int j = 1;
            switch (x)
            {
                case 1: j++;break;
                case 2: j++;break;
                case 3: j++;break;
                case 4: j++;break;
                case 5: j++;break;
                default: j++;
            }
            return j + x;
        }
    }