停止扫描程序读取用户输入java?

时间:2012-05-12 02:06:48

标签: java input java.util.scanner

我正在尝试编写此方法,该方法一直向用户读取,直到输入“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
}
}

4 个答案:

答案 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);
}

但我认为你正在学习,当你学习时这可能有点太多了。