我试着写一段超级简单的代码,它会问"我们快到了吗?"如果用户输入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")
因为两者不能同时存在