[英]Stop scanner from reading user input java?
我正在尝试编写这种方法,该方法不断向用户读取,直到输入“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
}
}
name == exit
错误。
你要
name.equals(exit)
要么
name.equals("exit")
取决于exit分别是变量还是字符串文字。 在Java中, ==
表示引用相等(例如,这两个引用是否指向内存中的相同地址),而。 equals
表示对象等价,通常由开发人员在类中overriden
。
if(name == exit)
这是真的。
但要确保在比较两个字符串时,当一个字符串是常量时,例如"exit"
然后确保它在比较时首先出现。
即它应该被比作
if ("exit".equals(name))
不是以下方式
if (name.equals("exit"))
将“exit”作为第一个值的主要原因是,如果name为null
则它不会触发NullPointerException
但如果我们将name
作为第一个对象进行比较,那么如果name为null则会触发NullPointerException
异常,因此请确保将来任何时候的事情。
Amirs的回答是100%正确的。 另外,在while循环中使用true,我认为在这种情况下使用else ... if语句会更好。 更具可读性,这就是为什么:)
假设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);
}
但我认为你正在学习,当你学习时,这可能有点太多了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.