这个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 ;
这很糟糕,因为在if
或else
子句的情况下,您可以轻松地打算运行多个语句。 使用花括号并避免在单行上放置条件语句:
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 ; } }
如果你在自己的循环中计算结果,你可以去除r
variables和if / else条件。
int s = 0; while( ( s = getInt() ) < 0 || s > 2 ) { System.out.println( "Try again, not a valid response"); }