2009-09-23 61 views
24

我得到了下面的代碼:的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.nextLine(); 
} 

和輸出的代碼如下:

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

注意它跳過了第一個名字項?它跳過它,直接進入第二個名字。我試圖尋找是什麼原因造成的,但我似乎無法完成。我希望有一個人可以幫助我。謝謝

+2

精確(真的,準確)的比賽http://stackoverflow.com/questions/1466008/ Java的掃描儀類閱讀串/ – CPerkins 2009-09-23 19:35:49

回答

26

錯誤的原因是nextInt只拉整數,而不是換行符。如果你在for循環之前添加一個in.nextLine(),它會吃掉空的新行,並允許你輸入3個名字。

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]; 
in.nextLine(); 
for (int i = 0; i < names.length; i++){ 
     System.out.print("Type a name: "); 
     names[i] = in.nextLine(); 
} 

或者只是讀取該行並將該值解析爲整數。

int nnames; 
String names[]; 

System.out.print("How many names are you going to save: "); 
Scanner in = new Scanner(System.in); 
nnames = Integer.parseInt(in.nextLine().trim()); 

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

這是因爲in.nextInt()沒有改變行。所以你首先「輸入」(在按3之後)導致循環中的in.nextLine()讀取endOfLine。

這裏的小改變,你可以做:

int nnames; 
    String names[]; 

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

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

這是因爲in.nextInt()只接受一個整型數字,沒有收到新的生產線。所以你輸入3並按下「Enter」,行的結尾由in.nextline()讀取。

這裏是我的代碼:

int nnames; 
String names[]; 

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

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

你可以簡單地更換

names[i] = in.nextLine();names[i] = in.next();

使用next()將只返回一個空間之前會發生什麼。 nextLine()在返回當前行後自動向下移動掃描器。

3

use sc.nextLine();兩個時間讓我們可以讀取字符串的最後一行

sc.nextLine() sc.nextLine()