Java 编译时无法访问的代码错误
Java compile time unreachable code error
我在程序的下一行遇到编译时间 "unreachable code" 错误:
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);
}
}
请帮我找出造成这种情况的确切原因。提前致谢。
永远无法到达 System.out.println
代码,即使 i
大于 j
。唯一的 break
将您 breaking
送出外部 for
循环。 System.out.println
语句在内部 for
循环之后,但是在内部 for
循环中,您要么继续循环,递减 j
,要么 break
外部loop
。无法到达 println
语句。
要打印循环结束后 i
和 j
的内容,请将 System.out.println
调用移动到外部 for
循环的结束大括号之后。
我们来分析这段代码:
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);
内部循环是无限循环。退出它的唯一方法是当 i > --j
为真时,但这将打破 outer 循环(由于 break tp;
的调用)并且程序将立即在 outer 循环之后执行下一段代码。这意味着没有条件 inner 循环终止 "normally" 所以它之后的下一个代码可以 运行.
我在程序的下一行遇到编译时间 "unreachable code" 错误:
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);
}
}
请帮我找出造成这种情况的确切原因。提前致谢。
永远无法到达 System.out.println
代码,即使 i
大于 j
。唯一的 break
将您 breaking
送出外部 for
循环。 System.out.println
语句在内部 for
循环之后,但是在内部 for
循环中,您要么继续循环,递减 j
,要么 break
外部loop
。无法到达 println
语句。
要打印循环结束后 i
和 j
的内容,请将 System.out.println
调用移动到外部 for
循环的结束大括号之后。
我们来分析这段代码:
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);
内部循环是无限循环。退出它的唯一方法是当 i > --j
为真时,但这将打破 outer 循环(由于 break tp;
的调用)并且程序将立即在 outer 循环之后执行下一段代码。这意味着没有条件 inner 循环终止 "normally" 所以它之后的下一个代码可以 运行.