2009-09-23 77 views
4

我得到了下面的代碼:的Java Scanner類閱讀串

 int nnames; 
    String names[]; 

    System.out.print("How many names are you going to save: "); 
    Scanner in = new Scanner(System.in); 
    nnames = in.nextInt(); 
    names = new String[nnames]; 

    for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.next(); 
    } 

    System.out.println(names[0]); 

當我運行這段代碼,掃描儀將只拿起第一個名字,而不是姓氏。當試圖輸入一個名字時,它有時會跳過一行,它會顯示出來,就好像我把名字留空了一樣,然後跳到下一個名字。我不知道是什麼原因造成的。

我希望有人能幫助我!

編輯:我曾嘗試in.nextLine();它修復了全名,但它仍然保持一條線,這裏是輸出的一個例子:

How many names are you going to save: 3 
Type a name: Type a name: John Doe 
Type a name: John Lennon 
+0

完全匹配http://stackoverflow.com/questions/1466418/java-scanner-class-reading-strings – CPerkins 2009-09-23 19:36:44

回答

8

相反的:

in.next(); 

用途:

in.nextLine(); 

nextLine()讀取字符,直到它找到一個新的行字符'\n'

2

Scanner.next停止閱讀時遇到一個分隔符,這是一個空白。改爲使用nextLine方法。

2

您的初始nextInt()後,仍然有一個空換行符在你的輸入中。所以只要你的nextInt()後添加nextLine(),然後進入你的循環:

... 
Scanner in = new Scanner(System.in); 
nnames = in.nextInt(); 
in.nextLine(); // gets rid of the newline after number-of-names 
names = new String[nnames]; 

for (int i = 0; i < names.length; i++){ 
    System.out.print("Type a name: "); 
    names[i] = in.nextLine(); 
} 
... 

+0

+1我最近失去了一個編程競賽,因爲我使用next()而不是nextLine()來跳過那個f首先\\ n。那真是太愚蠢了: – 2009-09-23 20:45:10

+0

那是CodeJam,偶然嗎?我今年第一次參加比賽,我被壓扁了 - 甚至沒有進入第二輪。但是我在第一輪和第一輪比賽中獲得了樂趣,並且明年我會回來的。 – CPerkins 2009-09-24 12:52:51

-1

嘗試使用:

System.out.println() 

相反的:

System.out.print()