boolean r = false ; int s = 0 ;
while (r == false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
文本永远不会显示,即使输入3或123,循环也永远不会终止。这里有什么问题?
boolean r = false ; int s = 0 ;
while (r == false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
在条件之后你使用了分号。 当你使用大括号为while
指定一个块时,不要使用分号。
while (r==false) /*什么都不做*/ ;
- Armstrongest请删除 while 后面的 ';'。
其他人已经指出了这个漏洞,但你的代码在其他方面也很可怕,最终会让你失误:
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
这是不好的,因为在if
或else
语句中,您很容易意图运行多个语句。使用花括号并避免将条件语句放在一行上:
if (!(s>=0 && s<=2))
{
System.out.println ("try again not a valid response");
}
else
{
r = true;
}
+1 给 Daniel DiPaolo。我想发一篇单独的回答来澄清这个问题。
在 Java 中,while 循环可以用两种方式编写。如果循环体只有一行代码,可以使用简写形式:
while (true)
System.out.println("While loop");
int i = 0;
while (i < 10) {
System.out.println("i = " + i);
i++;
}
boolean r = false ; int s = 0 ;
while (r != false) ;
{
s = getInt() ;
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
}
(请注意,我在这里留下了错误的分号),你会发现你想要执行的循环体只会被执行一次,因为循环永远不会运行。
if (s < 0 || s > 2)
这样更易理解。
当(r == false)时
应该为
while(!r)
尽管其他人都说分号是问题所在,但我认为这才是它的问题 :)
while(r == false)
更加明确和易读。我想人们也可以争辩说应该是 while(false == r)
,但我讨厌那样做。无论如何,他不必改变它为 !r
,因为 r
是一个布尔值,所以无论哪种方式都没有关系,这只是一个风格问题。 - Carson Myersr
和 !r
,而不是 r == false
和 r == true
,可以避免在 Java 中出现 r = false
和 r = true
的错误(这不会导致编译错误)。如果您想使其更明确和易读,请将 r
重命名为类似于 continue
或 found
的内容。 - ILMTitan不相关的回答,我真的非常建议你遵循Sun的样式指南。
boolean r = false ;
int s = 0 ;
while (r == false) {
s = getInt() ;
if (!(s>=0 && s<=2)) {
System.out.println ("try again not a valid response") ;
} else {
r = true ;
}
}
如果你在循环中评估结果,就可以摆脱r
变量和if/else条件。
int s = 0;
while( ( s = getInt() ) < 0 || s > 2 ) {
System.out.println( "Try again, not a valid response");
}
while (r == false)
是一个无限循环,不做任何事情,因为 r 被初始化为 false。 - Dave Costawhile(false)
而自食其言。 - Daniel DiPaolo