2016-01-22 74 views
0

我发现,可以使用下面的代码复制一个严重的问题:如何Scanner.next()与用户输入交互

Scanner scanner = new Scanner(System.in); 
System.out.println("First entry:"); 
System.out.println("->" + scanner.next()); 
System.out.println("Second entry:"); 
System.out.println("->" + scanner.nextLine()); 

如果用户条目是“一”,调用nextLine()将捕获一个空字符串。我发现为什么这发生在其他帖子[1][2]next()调用只留下行末尾的'\ n'字符。

我不为已了解为什么下面的代码工作:

System.out.println("First entry:"); 
System.out.println("->" + scanner.next()); 
System.out.println("Second entry:"); 
System.out.println("->" + new Scanner(System.in).nextLine()); 

例子:

对于输入 “一个Hello World” 的第一个块获得 “A”在下一个()调用和nextLine()调用中的“Hello World”。

但在代码的第二块得到的“一”中的next()调用,但在nextLine“抛弃”了的“Hello World”()调用,并等待用户PROMT再次

*我知道为什么在第一个代码块中nextLine()调用会得到一个空字符串

+0

''新的扫描仪(System.in)''创建一个从头开始解析的新对象。 – mmuzahid

+0

第一个Scanner实例“锁定”最后一行或类似的东西?它从一开始就解析什么? –

+0

@NayukiMinase这不是从这个问题重复,我只是没有一个更好的标题使用 –

回答

0

当您使用Scanner.next()时,您需要小心按下“enter”/“回车”键。只要你这样做,扫描仪将读取输入作为回车空行。

如果您用的输入

“一的” HelloWorld

你的第一个代码示例,它应该仍然工作。

你的第二个样品,因为你正在创建一个新的扫描仪,这样即使你按下它会读取输入回车键

0

new Scanner(System.in)将创建一个新的对象,并从开始就知道解析。

检查下面的代码。

Scanner scanner = new Scanner(System.in); 
    System.out.println("First entry:"); 
    System.out.println("->" + scanner.nextLine()); 
    System.out.println("Second entry:"); 
    System.out.println("->" + scanner.nextLine()); 

在两种情况下均有效。

相关问题