繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM