Java 这个while循环有什么问题? boolean r=false;int s=0; 而(r==false); { s=getInt(); 如果(!(s>=0&&s

Java 这个while循环有什么问题? boolean r=false;int s=0; 而(r==false); { s=getInt(); 如果(!(s>=0&&s,java,while-loop,infinite-loop,Java,While Loop,Infinite Loop,条件后有一个分号。当使用大括号为而指定块时,不使用分号。条件后有一个分号。当使用大括号为而指定块时,不使用分号。在while之后删除“;”。删除“;”a过了一会儿。其他人已经指出了这个错误,但是你的代码在其他方面很可怕,最终会绊倒你: boolean r = false ; int s = 0 ; while (r == false) ; { s = getInt() ; if (!(s>=0 && s<=2)) System.out.printl

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

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

在while之后删除“;”。

删除“;”a过了一会儿。

其他人已经指出了这个错误,但是你的代码在其他方面很可怕,最终会绊倒你:

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

它更容易阅读,也不太可能引入难看的错误。

其他人已经指出了错误,但您的代码在其他方面很可怕,最终会让您绊倒:

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 ; 
}
它更容易阅读,也不太可能引入难看的bug。

while(r==false)

应该是

而(!r)

不管别人怎么说分号,这就是我认为它错的地方:)

while(r==false)

应该是

而(!r)


不管其他人怎么说分号,这就是我认为它错的地方:)

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

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

if (!(s>=0 && s<=2))
{
    System.out.println ("try again not a valid response");
}
else
{
    r = true;
}
这将在控制台上打印“While loop”,直到程序结束。另一个选项是指定大括号之间的循环体,如上所述:

while (true)
    System.out.println("While loop");
inti=0;
而(i<10){
System.out.println(“i=“+i”);
i++;
}
这将在单独的一行上分别打印“i=0”、“i=1”、…、“i=9”

您发布的代码混淆了两者。在简写的while循环中,Java解析器希望在while循环条件和分号之间找到一条语句。因为在这里找不到语句,while循环运行,但什么也不做;它没有正文。此外,因为循环没有正文,所以没有机会或者您的变量r假定一个新值;条件的计算结果始终为true,循环永远不会退出

如果要在示例中否定while循环中的条件,即

int i = 0;
while (i < 10) {
    System.out.println("i = " + i);
    i++;
}
boolean r=false;int s=0;
而(r!=假);
{
s=getInt();

如果(!(s>=0&&s+1)给Daniel DiPaolo。我想我会发布一个单独的答案来澄清为什么会出现这种情况

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

if (!(s>=0 && s<=2))
{
    System.out.println ("try again not a valid response");
}
else
{
    r = true;
}
这将在控制台上打印“While loop”,直到程序结束。另一个选项是指定大括号之间的循环体,如上所述:

while (true)
    System.out.println("While loop");
inti=0;
而(i<10){
System.out.println(“i=“+i”);
i++;
}
这将在单独的一行上分别打印“i=0”、“i=1”、…、“i=9”

您发布的代码混淆了两者。在简写的while循环中,Java解析器希望在while循环条件和分号之间找到一条语句。因为在这里找不到语句,while循环运行,但什么也不做;它没有正文。此外,因为循环没有正文,所以没有机会或者您的变量r假定一个新值;条件的计算结果始终为true,循环永远不会退出

如果要在示例中否定while循环中的条件,即

int i = 0;
while (i < 10) {
    System.out.println("i = " + i);
    i++;
}
boolean r=false;int s=0;
而(r!=假);
{
s=getInt();

如果(!(s>=0&&s除其他注释外,还应将if更改为

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)

这样更容易理解。

除了其他注释外,您还应该将if改为

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的风格指南

if (s < 0 || s > 2)

不相关的回答,我真的建议你遵循Sun的风格指南

if (s < 0 || s > 2)

嘿嘿…
while(r==false)/*什么也不做*/;
Hehe…
while(r==false)/*什么都不做*/;
我不同意使用大括号。如果是一个单独的语句,它就是一个单独的语句。作为一种风格,我会缩进,但不会在单独的语句中使用大括号……然而这是一场宗教斗争。@Atomiton绝对,我更喜欢一直使用大括号,因为我可能会在某个时候回来更改它,这是一个很好的选择如果我一开始不把它们放在那里,我会搞砸的。至少把它们放在另一条线上——我希望我们能在这一点上达成一致:)我从来没有在一条语句中使用大括号,我经常会在语句中添加更多的大括号,我也从来没有不小心忘记添加大括号并破坏我的控制流……除非我已经写了一段时间python,然后又回到C,也就是说。虽然我经常在一行中去掉大括号,但我不能为这种做法辩护。fac也就是说,使用大括号几乎不需要花费任何成本,即使它们让你有点不舒服,再看一眼也不到一秒钟。另一方面,不使用大括号——即使是千分之一的“if”语句(比如说,当你编写python一段时间后,回到C)如果你碰巧把它搞砸了,可能需要几分钟或几个小时来修复——这是站不住脚的,而且很明显是错误的。但我还是经常不说这些话……我喜欢人们说“我再也不会回来犯那个错误”这样的话。因为可能不是你回到代码上来,而且无论如何,代码写得比政变还多几个月前的le可能是别人写的。我不同意使用大括号。如果它是一个语句,它就是一个语句。作为风格问题,我会缩进,但不会对单个语句使用大括号