为什么BlueJ给我的代码一个“无法访问的语句”错误? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么BlueJ给我的代码一个“无法访问的语句”错误? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

作为我的APCS课程的一部分,我必须解决已编写的程序中的小问题,以便稍后引用。这部分是关于while循环的,我从来没有学过无法访问的语句,所以我不知道如何修复它。附件是程序的while循环。错误显示在第一个大括号中。

while( false ) {
    //Since the guess doesn't match, determine if it is too low or too high.
    if (userGuess > secretNumber) {
        System.out.print("Guess number " + numGuesses + " is too LOW. ");
    }
    else if (userGuess < secretNumber) {
        System.out.print("Guess number " + numGuesses + " is too HIGH. ");
    }
}
答案

语言规范的特定部分(至少对于Java 9)是Sec 14.21,它描述了语句被认为无法访问的条件。

特别是:

如果由于无法访问语句而无法执行语句,则会发生编译时错误。

和(强调我的):

如果至少满足下列条件之一,则while语句可以正常完成:

  • while语句是可访问的,条件表达式不是值为true的常量表达式(第15.28节)。
  • 有一个可到达的break语句退出while语句。

如果while语句可以访问且条件表达式不是值为false的常量表达式,则可以访问包含的语句。

所以,你的while循环的主体被认为是无法访问的,因为表达式的值是false,因为它是常量。

要修复它,请更改其中任何一个条件;或者删除while循环,因为它无论如何都不会在逻辑上做任何事情。

另一答案

while(false){//...}行永远不会允许代码到达内部if或else语句。

如果while结构中的条件表达式不是常量false,则仅评估if和else语句,这在代码中不是这种情况。

因此,编译器抱怨在当前场景中无法达到if&else语句。

您可以改为使用变量并为其赋予布尔值,如Elliott Frisch先生在其答案中所证明的那样。

另一答案

使用循环结构while ( boolean ),只有在boolean评估为true时才输入循环体。布尔文字false无法求值为true,因此正文是无法访问的代码。

boolean loopControl = false;
while ( loopControl ) { // <-- this is fine ..
   // ...
}

以上是关于为什么BlueJ给我的代码一个“无法访问的语句”错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java中的ComboBox不起作用bluej

BlueJ 试图永远运行我的 Java 程序

为啥我在 Java 中出现无法访问的语句错误?

键入时在 BlueJ 中显示代码自动完成建议

如何在 BlueJ 中为 ArrayList 输入参数?

代码中显然有一个无法访问的语句,但可以编译 - 为啥? [复制]