为什么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给我的代码一个“无法访问的语句”错误? [重复]的主要内容,如果未能解决你的问题,请参考以下文章