0

为什么会这样,

public class Bar 
{
    public static void main(String[] args) 
    {
        int i = 1;

        switch(i)
        {
            case 0:
            case 1:
            case 2:
                System.out.println("Case 2 being executed");
                break;
            default:
                break;
        }
    }
}

输出这个,

案例2正在执行

?

2当输入值显式时,如何输入输入值的 case 块1?请注意,我知道我可以通过break在 case 块中为 1 添加语句来避免这种行为。

4

3 回答 3

9

当输入值显式为 1 时,如何输入输入值为 2 的 case 块?

这种行为称为失败,这是初学者使用switch-case. 实际上,case 1:确实先执行。但是,由于case 1中没有break语句,因此您将继续执行下一个 case,直到找到语句。因此,它甚至会执行代码并因此执行输出。然后它在执行后中断,因为它遇到了中断。switch-casebreakcase 2:case 2

因此,将您的更改swich-case为: -

switch(i)
{
        case 0: break;
        case 1: break;
        case 2:
            System.out.println("Case 2 being executed");
            break;
        default:
            break;
}

查看预期的行为。

于 2013-01-28T16:34:20.903 回答
1

switch 语句将遍历所有 case 块,直到它到达第一个 break 或 switch 语句的结尾。

因此,在您的情况下,它会执行所有块,直到它到达第二个块中的中断。

如果“0”和“1”块中有任何语句,这些语句也会被执行。

这种行为也非常有用。

于 2013-01-28T16:41:32.563 回答
1

因为您没有在案例 1 之后休息,所以它使用案例 2 的逻辑。在每个 case 之后都需要一个 break 语句,否则编译器将进入下一行。

于 2013-01-28T16:34:55.040 回答