Java编译时无法访问代码错误

时间:2015-01-06 22:41:31

标签: java compiler-errors

我正在编译时间"无法访问的代码"我程序中以下行的错误:

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);
    }
}

请帮助我找出确切的原因。提前谢谢。

3 个答案:

答案 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声明。

要打印循环结束后ij的内容,请在外System.out.println循环的结束括号后移动for调用。

答案 2 :(得分:1)

内部循环是一个无限循环。退出它的唯一方法是i > --j为真,但这将打破外部循环(由于break tp;的调用),程序将立即执行下一个外部循环后的代码。这意味着没有条件内部循环“正常”终止,因此下一个代码可以运行。