int i = 0, j = 5;
tp: for (;;) {
i++;
for (;;) {
if(i > --j) {
break tp;
}
}
System.out.println("i =" + i + ", j = " + j); //Unreachable statement, why?
}
我认为该语句是可以访问的,因为之前有break语句,因此System.out.println
后面的语句可以正常完成,因为System.out.println
是可以访问的。错误在哪里?
答案 0 :(得分:4)
因为你有两个无限循环。变化
break tp;
要
break;
这个陈述是可以达到的。
答案 1 :(得分:3)
您的break语句将返回外部循环的开头(tp
标签)。这就是为什么你永远无法达到println
陈述。
答案 2 :(得分:2)
内环是无限的。如果内部没有任何内容,则应该清楚print
无法访问。如果在其中添加break tp
,它将破坏封闭循环而不是内部循环,因此语句仍然无法访问。
使用break
打破内部循环或使用tp
标记内部循环以纠正它。
答案 3 :(得分:2)
您的代码就像
L1 : INFINITE LOOP
{
L2 : INFINITE LOOP
{
break to return to L1
}
SOP("SOmething")
}
因此,每当循环L2中断时,它将控制权返回到循环L1并再次启动循环L2。 这将永远持续,控件将永远无法退出循环L2并达到SOP语句,因此SOP语句无法访问。