在 java 开头带有 default 子句的 switch 语句
Posted
技术标签:
【中文标题】在 java 开头带有 default 子句的 switch 语句【英文标题】:switch statement with an default clause at the beginning java 【发布时间】:2015-01-12 22:43:03 【问题描述】:以下代码打印出1,2,3
,如果我更改int i = 3;
,它将打印出3
。我想知道这背后的原因。我使用了调试器,似乎i = 3
转到案例 3 并打印出 3 然后程序终止。我相信当 i=5
转到 default
时,这是否意味着 case 1,case 2 and case 3
都属于 default
条款?
int i = 5;
switch(i)
default:
case 1:
System.out.println(1);
case 2:
System.out.println(2);
case 3:
System.out.println(3);
编辑:
这个问题来自一个测试,它要求这个代码的输出。所以我想弄清楚为什么输出是1,2,3
,我知道需要break;
,但这不是我想要的答案。
【问题讨论】:
你需要break;
在每个case的末尾声明,否则执行将/* fall through */
到它下面的case。
@rgettman 感谢您的提醒,但这不是我的问题,我离开了'break;'故意为这个问题而出的。
事实上,确实如此。 break
语句的缺失完全解释了您的输出,以及为什么有些案例似乎“属于”其他案例。
那么请重新插入。 break
s 在这里是必不可少的。
“属于默认子句”并不是一个真正有意义的事情。事物不属于从句;只是switch
可以去的地方,default
的情况是在开头。
【参考方案1】:
i == 5
与您的任何case
s 都不匹配,因此控制权转到default
子句。
default
子句是空的,没有break
语句,它立即将falls through 指向下面的case
— 您的代码中的case 1
。
case 1
打印出"1"
,并且由于它也没有break
语句,因此会落入case 2
,依此类推。
case
s 1
, 2
, 3
不属于 default
——重要的是他们的顺序。
如果您重新排序您的开关statement
并将default
子句写为最后一个子句,它不会打印任何内容。
【讨论】:
【参考方案2】:如果您在任何情况下都没有中断或默认设置,它将失败,直到找到中断或案例块结束。因此,在您的情况下,由于您没有默认中断,因此一直到最后。如果不中断,您的程序将为 i>3 打印 1,2,3。
【讨论】:
是的@5gon12eder 你是对的我已经删除了always。以上是关于在 java 开头带有 default 子句的 switch 语句的主要内容,如果未能解决你的问题,请参考以下文章