2017-02-16 5 views
0

次のコードをご覧ください。Javaスキャナの問題?

package com.company;

import java.util.Scanner; 



public class Main { 

    public static void main(String[] args) { 
    // write your code here 


      Scanner input = new Scanner (System.in); 

      System.out.print("Enter the number of students: "); 
      int numberOfStudents = input.nextInt(); 

      String[] students = new String [numberOfStudents]; 

      //input.nextLine(); 


      for (int i = 0; i < students.length; i++){ 
       System.out.println("Enter name for student " + (i+1) + ":" ); 
       students[i] = input.nextLine(); 

      } 

      for (int i = 0; i < students.length; i++){ 
       System.out.println(students[i]); 

      } 
     } 

    } 

私は "input.nextLine();"というステートメントをコメントアウトしています。最初のループの直前に、このコードを実行すると(これは私の元のコードでした)、ループは2回実行されてから停止し、入力を待ってから通常通り続行します。これを修正するには、それが正常に動作し、すべての反復の後で停止し、入力を求めます。なぜこれが似ているのですか、Scannerはどのように機能していますか?

出力例:input.nextLine(なし

)。ループの前に:

Enter the number of students: 4 
Enter name for student 1: 
Enter name for student 2: 
name1 name2 
Enter name for student 3: 
name3 
Enter name for student 4: 
name4 

そして、もし私がinput.nextLine()のコメントを外すならば。

Enter the number of students: 4 
Enter name for student 1: 
name1 
Enter name for student 2: 
name2 
Enter name for student 3: 
name3 
Enter name for student 4: 
name4 

これは正常に実行されます。

+1

これは予想される動作です。 'nextInt()'を使うと行が終了することはないので、次回の 'nextLine()'の間に 'nextLine()'を使ってより多くの入力を待たなければなりません。 – Zircon

+1

** //input.nextLine();という行があるためです。ユーザー入力文字列を読み込み、それをスローします。それは何にも割り当てられません。 forループに格納され始めます –

+0

ありがとうございました。 –

答えて

0

は、ループのために、あなたはnextLine()方法は次の行にスキャナを進み、次の入力を待つnext()一方、読み取ったものを返すようinput.next();input.nextLine();を交換する必要があります。以下は動作します:

Scanner input = new Scanner(System.in); 

System.out.print("Enter the number of students: "); 
int numberOfStudents = input.nextInt(); 

String[] students = new String[numberOfStudents]; 

// input.nextLine(); 

for (int i = 0; i < students.length; i++) { 
    System.out.println("Enter name for student " + (i + 1) + ":"); 
    students[i] = input.next(); 

} 

for (int i = 0; i < students.length; i++) { 
    System.out.println(students[i]); 

} 
+0

非常にうれしい、ありがとう、それは将来の問題のために念頭に置くべき新しいことです。 –