【问题标题】:How the second print statement gives compile time error?第二个打印语句如何给出编译时错误?
【发布时间】:2018-11-19 10:32:48
【问题描述】:

第二个打印语句给出编译时错误。请解释

public class mainClass {
    public static void main(String args[]) {    
        final int a=10, b=20;

        while(a < b) {
            System.out.println("Hello");
        }
        System.out.println("World");
    } 
}

【问题讨论】:

  • 始终包含您遇到的确切错误。
  • 因为根据您的逻辑,a 将始终小于 b,而外部的 sop 语句将无法访问

标签: java iteration


【解决方案1】:

条件a&lt;b 始终成立。

编译器检测到你的程序永远不会结束并且永远不会到达第二个打印行,因此它会抛出编译错误

您可能希望将您的 while 更改为 if 支票

【讨论】:

  • 并不是说它总是正确的,而是它是一个编译时常量,它的值是正确的。 (例如,您可以删除final,而a&lt;b 仍将始终为真,但它不是一个常量表达式)。细微的差别,但编译时常量是编译器用来确定可达性的。
【解决方案2】:

你的代码可以写成:

public class Answer {

    public static void main(String[] args) {

        while (10 < 20) { //always true, so loop is infinite
            System.out.println("Hello");
        }
        System.out.println("World"); //previous loop is infinite => this statement will never be reached
    }

}

但是,如果你这样写:

public class Answer {

    public static void main(String[] args) {

        int a = 10, b = 20;

        while (a < b) {

            System.out.println("Hello");
            b--; //if you decrease var b, in some point while condition becomes false
        }
        System.out.println("World"); //AND this statement will be reached
    }

}

请注意 int b 不能是最终的!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多