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

时间:2018-02-28 17:09:53

标签: java while-loop

作为我的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. ");
    }
}

3 个答案:

答案 0 :(得分:4)

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

特别是:

  

如果语句因无法访问而无法执行,则为编译时错误。

和(强调我的):

  

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

     
      
  • 可以访问while语句,条件表达式不是值为true的常量表达式(第15.28节)。

  •   
  • 有一个可到达的break语句退出while语句。

  •   
     

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

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

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

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

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

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