我正在编译时间"无法访问的代码"我程序中以下行的错误:
System.out.println(" i =" + i +",j =" + j);
public static void main(String[] args) {
int i = 0, j = 5;
tp: for (;;)
{
i++;
for (;;)
{
if (i > --j) {
break tp;
}
}
System.out.println("i =" + i + ", j = " + j);
}
}
请帮助我找出确切的原因。提前谢谢。
答案 0 :(得分:7)
让我们分析一下这段代码:
tp: for (;;) //<-- similar to while(true)
{
i++; //increases i by 1
for (;;) //<-- similar to while(true)
{
if (i > --j) { //decreases j and compares its value against i
break tp; //breaks tp, which means breaking the outer for loop
}
}
//while(true) above
//if break gets executed, it breaks this for loop
//so this line can never be executed
System.out.println("i =" + i + ", j = " + j);
}
最简单的解决方案:
将System.out.println("i =" + i + ", j = " + j);
移到外部for
循环之外。
tp: for (;;)
{
i++;
for (;;)
{
if (i > --j) {
break tp;
}
}
}
System.out.println("i =" + i + ", j = " + j);
答案 1 :(得分:3)
即使System.out.println
大于i
,也无法访问j
代码。唯一的break
会将breaking
发送给外部for
循环。 System.out.println
语句位于内部for
循环之后,但在内部for
循环中,您要么循环,递减j
,要么break
外部loop
。没有办法达到println
声明。
要打印循环结束后i
和j
的内容,请在外System.out.println
循环的结束括号后移动for
调用。
答案 2 :(得分:1)
内部循环是一个无限循环。退出它的唯一方法是i > --j
为真,但这将打破外部循环(由于break tp;
的调用),程序将立即执行下一个外部循环后的代码。这意味着没有条件内部循环“正常”终止,因此下一个代码可以运行。