首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人能解释一下这个开关语句的行为吗?

有人能解释一下这个开关语句的行为吗?
EN

Stack Overflow用户
提问于 2013-01-28 16:33:13
回答 3查看 766关注 0票数 0

为什么这个,

代码语言:javascript
运行
复制
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时,如何才能输入1输入值的case块?注意,我知道我可以通过在case块中为1添加一个break语句来避免这种行为。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-28 16:34:20

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

这种行为称为“失败”,这是初学者在使用switch-case时经常犯的错误。实际上,case 1:确实首先执行。但是,由于在第1种情况中没有break语句,所以switch-case继续执行下一种情况,直到找到break语句为止。因此,它甚至将执行case 2:的代码,从而执行输出。然后它在执行case 2之后中断,因为它遇到了一个中断。

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

代码语言:javascript
运行
复制
switch(i)
{
        case 0: break;
        case 1: break;
        case 2:
            System.out.println("Case 2 being executed");
            break;
        default:
            break;
}

看到你想要的行为。

票数 9
EN

Stack Overflow用户

发布于 2013-01-28 16:34:55

因为你没有在案例1后面加上一个中断,所以它使用了案例2的逻辑。在每一种情况下,您都需要一个break语句,否则编译器就会转到下一行。

票数 1
EN

Stack Overflow用户

发布于 2013-01-28 16:41:32

开关语句将运行所有case块,直到它到达开关语句的第一个中断或结束为止。

因此,在您的示例中,它执行所有块,直到到达第二个块中的中断为止。

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

这种行为也是非常有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14566620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档