我正在尝试编写此方法,该方法一直向用户读取,直到输入“exit”字样。我尝试了休息和循环;它不起作用。我正在尝试,但即使输入“退出”这个词,它也不会停止。任何想法如何解决这一问题?感谢。
public void read(Scanner scanner){
while(3<4){
String in = scanner.nextLine();
Scanner scanner_2 = new Scanner(in);
String name = null;
if(scanner_2.hasNext()){
//create and add the user to the user container class
name = scanner_2.next();
System.out.println(name);
}
if(name == exit)
//stop or break the while loop
}
}
答案 0 :(得分:9)
name == exit
错了。
你想要
name.equals(exit)
或
name.equals("exit")
取决于exit分别是变量还是字符串文字。在Java中,==
表示引用相等(例如,这两个引用是否指向内存中的相同地址),而。equals
表示对象等价,通常在类中由overriden
表示显影剂。
答案 1 :(得分:5)
if(name == exit)
是真的。
但要确保在比较两个字符串时,当一个字符串是常量时,例如"exit"
然后确保它在比较时首先出现。
即。它应该比较为
if ("exit".equals(name))
不是以下方式
if (name.equals("exit"))
将“退出”作为第一个值的主要原因是,如果名称为null
,则它不会触发NullPointerException
,但如果我们将name
作为第一个对象进行比较,那么name为null然后它将触发NullPointerException
异常,所以在将来的任何时候都要确保这个。
答案 2 :(得分:3)
Amirs的回答是100%正确的。另外,在while循环中使用true,我认为在这种情况下使用else ... if语句会更好。更具可读性,这就是为什么:)。
答案 3 :(得分:3)
假设String exit = "exit";
在某个级别被声明为类级别:
name == exit
检查name
引用的对象和exit
引用的对象是否相同。您想要的是name
引用的对象的值和exit
引用的对象的值是否相同。
你可以通过
来做到这一点if(name.equals(exit))
也就是说,代码中有很多东西可以改进。我知道你可能正在编写这段代码来学习java,但是一些小的改动可以使代码更具可读性。
此外,根本不需要您使用的第二台扫描仪。
以下代码将与您的代码执行相同的操作,但更小且更易读。
String name = "";
while(!name.equals("exit")) {
if(scanner.hasNext()) {
//create and add the user to the user container class
name = scanner.next();
System.out.println(name);
}
}
实际上他的代码可以进一步改进为:
String name = null;
while(scanner.hasNext() && !(name = scanner.next()).equals("exit")) {
System.out.println(name);
}
但我认为你正在学习,当你学习时这可能有点太多了。