2009-09-23 7 views
24

私は次のコードを得た:Javaのスキャナクラスの読み取り列

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番目の名前のエントリのためにまっすぐに行きました。私はこれを引き起こす原因を探してみましたが、私はそれを釘付けにすることができないようです。私は誰かが私を助けることができるといいですありがとう

+2

正確な(実際には、完全に)一致http://stackoverflow.com/questions/1466008/ java-scanner-class-reading-strings / – CPerkins

答えて

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()が行を変更しないためです。したがって、最初に "enter"(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ので、()だけint型の数を受け取る、新しい行を受信しません。だから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.next();

names[i] = in.nextLine();を置き換える:

は、ここに私のコードです。 nextLine()は、現在の行を返した後にスキャナを自動的に下に移動します。

3

使用sc.nextLine(); 2時間我々は、文字列の最後の行を読むことができるように

sc.nextLine() sc.nextLine()

関連する問題