编译器无法退出 while 循环



我试着写一段超级简单的代码,它会问"我们快到了吗?"如果用户输入yes,他们会得到答案&;finally&;如果用户说的不是"是",电脑就会一直问我们快到了吗?

由于某些原因,当我运行下面的代码时,即使我输入"yeah"在第一次提示之后,电脑一直在打印,我们快到了吗?不能通过循环。

import java.util.Scanner;
class FirstAttempt {
public static void main(String args[]) {

Scanner s= new Scanner(System.in);
String a ="  ";

System.out.println("are we nearly there yet?");
a  = s.next();



while ( a != "yeah" & a != "Yeah")

{System.out.println("are we nearly there yet?");
s = new Scanner(System.in);
a = s.nextLine(); }

System.out.println("finally");

} }

问题就在于你在while中写条件的方式。

应用程序不进入循环,因为您的条件总是false。基本上,这是因为您不是在比较String对象的值,而是比较它们实例的值。

在Java中,您必须使用equals来比较一个String对象与另一个String对象,而不是使用操作符!=或==

另外,我建议你使用&&而不是&。第一个是短路,这意味着第一个条件被求值,只有在它为真的情况下,第二个条件也被求值。

然而,有一种更有效的方法可以做到这一点。看这个:
while ( !a.equalsIgnoreCase("yeah")) )

要测试字符串是否相等,您需要使用equals:

while ( !(a.equals("yeah") || a.equals("Yeah")) )

&是位操作——您可能需要&&||的逻辑操作。

同样,不需要在循环中创建一个新的Scanner。只要继续使用main方法顶部的那个。

&运算符,也被称为'按位and',将计算所有条件,而不管第一个条件是真还是假。所以当输入"yeah"使第一个条件为假,从而中断循环,第二个条件仍被求值为真,并继续循环。你应该使用&&

您必须更改
while ( a != "yeah" & a != "Yeah")while ( a != "yeah" || a != "Yeah")因为两者不能同时存在

最新更新