这个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 ; } 

即使input3或123,文本也不会显示,循环也不会终止。 这里怎么了?

条件之后你有一个分号。 当您不使用分号时,使用大括号为您指定一个块。

去除 ';' 过了一阵子。

其他人已经指出了这个错误,但是你的代码在其他方面可能会吓到你,

 if (!(s>=0 && s<=2)) System.out.println ("try again not a valid response") ; else r = true ; 

这很糟糕,因为在ifelse子句的情况下,您可以轻松地打算运行多个语句。 使用花括号并避免在单行上放置条件语句:

 if (!(s>=0 && s<=2)) { System.out.println ("try again not a valid response"); } else { r = true; } 

阅读起来比较容易,也不太可能引入难以察觉的错误。

while(r == false)

应该

而(!R)

尽pipe别人都说分号,这是我认为是错误的:)

+1给Daniel DiPaolo。 我想我会发布一个单独的答案,澄清为什么是这样的情况。

Java中的循环可以用两种方法之一来编写。 如果循环体中只有一行,可以用简写的方式写出来:

 while (true) System.out.println("While loop"); 

这将在控制台上打印出“While循环”,直到程序结束。 另一个选项是在大括号之间指定一个循环体,就像上面所做的那样:

 int i = 0; while (i < 10) { System.out.println("i = " + i); i++; } 

这将在单独的行上打印出“i = 0”,“i = 1”,…,“i = 9”。

你发布的代码是混淆了两者。 在简短的while循环中,Javaparsing器期望在while循环条件和分号之间find一条语句。 因为在这里没有find声明,所以while循环运行,但什么都不做; 它没有身体。 此外,因为循环没有身体,你的variablesr就没有机会承担新的价值; 条件总是评估为真,循环永远不会退出。

如果你要否定你的例子中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 (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 ; } } 

如果你在自己的循环中计算结果,你可以去除rvariables和if / else条件。

 int s = 0; while( ( s = getInt() ) < 0 || s > 2 ) { System.out.println( "Try again, not a valid response"); }