2016-01-22 85 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()); 

在兩種情況下均有效。

相關問題