Java Scanner行为奇怪

时间:2017-03-31 15:06:09

标签: java java.util.scanner

我遇到了一个我无法弄清楚的问题。我正在使用单个Scanner对象并传递它(痛苦地我了解到同一个流上的多个Scanner对象会导致问题https://www.securecoding.cert.org/confluence/display/java/FIO06-J.+Do+not+create+multiple+buffered+wrappers+on+a+single+byte+or+character+stream)。扫描程序工作正常,并在此部分代码之前和之后从用户收集信息。但是在代码的这一部分中,它不会停止获取用户输入。

你能帮忙解释为什么下面的代码被破坏了吗?

//class A
Scanner in; //global value

String bookName = "";//global value

in = new Scanner(System.in); //initialized in class A constructor

//inside main of class A

System.out.println("before: " + a.bookName);
a.bookName = c.getBookName(a.in, a.bookName);
System.out.println("after: " + a.bookName);

//method in class C to get the data from the user via terminal

 public String getBookName(Scanner in, String bookName) 
 {

        System.out.println("enter name as appears in the database!");

        System.out.println("current value: >"+ bookName + "<");
        bookName = in.nextLine();

        System.out.println("userInput: >" + bookName + "<");

        return bookName;
    }

输出(有问题的代码减少了用户提示,而不是下面的图片): enter image description here

当我运行此代码时,程序会运行getBookName方法,而不会停止获取任何用户信息。为什么Scanner对象没有收集用户输入?以及如何修改缺陷以收集带空格的字符串(例如:&#34;你真是太棒了...谢谢!&#34;)?

我尝试in.reset(),而不是使用bookName而不是next()初始化全局nextLine()变量,在自定义类中使用nextLine()来确保我理解它,以及其他一些东西,我不知道为什么这段代码不起作用。

0 个答案:

没有答案