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 ;
}
即使输入 3 或 123 并且循环永远不会终止,文本也不会显示自己。这里有什么问题?
条件后面有一个分号。当您使用大括号为您指定一个块时,您while
不使用分号。
去除那个 ';' 过了一阵子。
其他人已经指出了这个错误,但你的代码在其他方面很可怕,最终会让你绊倒:
if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ;
else r = true ;
这很糟糕,因为您可以轻松地打算在if
orelse
子句的情况下运行多个语句。使用花括号并避免将条件语句放在一行:
if (!(s>=0 && s<=2))
{
System.out.println ("try again not a valid response");
}
else
{
r = true;
}
它更容易阅读,并且不太可能引入难以看到的错误。
而(r == 假)
应该
而(!r)
尽管其他人都说分号,但我认为这是错误的:)
+1 丹尼尔·迪保罗。我想我会发布一个单独的答案来澄清为什么会这样。
Java 中的 While 循环可以用两种方式之一编写。如果循环体只有一行,您可以用简写方式编写它们:
while (true)
System.out.println("While loop");
这将在控制台上打印出“While loop”,直到程序结束。另一个选项是在大括号之间指定一个循环体,就像您在上面所做的那样:
int i = 0;
while (i < 10) {
System.out.println("i = " + i);
i++;
}
这将在单独的行上打印出“i = 0”、“i = 1”、...、“i = 9”。
您发布的代码会将两者混淆。在简写的 while 循环中,Java 解析器期望在 while 循环条件和分号之间找到一条语句。因为这里没有找到语句,所以while循环运行,但什么也不做;它没有身体。此外,由于循环没有主体,因此您的变量 r 没有机会采用新值;条件总是评估为真,循环永远不会退出。
如果您要在示例中否定 while 循环中的条件,即
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 更改为
if (s < 0 || s > 2)
这种方式更容易理解。
不相关的答案,我真的建议您遵循 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");
}