我遇到了一个我无法弄清楚的问题。我正在使用单个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;
}
当我运行此代码时,程序会运行getBookName
方法,而不会停止获取任何用户信息。为什么Scanner对象没有收集用户输入?以及如何修改缺陷以收集带空格的字符串(例如:&#34;你真是太棒了...谢谢!&#34;)?
我尝试in.reset()
,而不是使用bookName
而不是next()
初始化全局nextLine()
变量,在自定义类中使用nextLine()
来确保我理解它,以及其他一些东西,我不知道为什么这段代码不起作用。