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