2017-04-21 12 views
-1

私は、ユーザーに整数入力を促し、その入力に文字列配列の長さを設定するメソッドを持っています。問題は、配列を反復処理しているときのようです... "numofstud"として3を入力すると、2つの値しか格納されません。私はfor (int i = 0; i < nameArray.length + 1; i++)を追加しようとしましたが、それは私にArrayIndexOutOfBoundsエラーを与えました...配列を反復するjava

誰かが私の間違いがアレイを反復するときに私に教えてくれますか? おかげ

void userInput(){ 
    Scanner s = new Scanner(System.in); 
    System.out.println("Please enter the number of students: "); 

    while(!s.hasNextInt()){ 
     s.next(); 
    } numofstud = s.nextInt(); 

    String nameArray[] = new String[numofstud]; 

    for(int i = 0; i < nameArray.length ; ++i){ 
     System.out.println("Please enter the student's name: "); 
     while(!s.hasNext("[a-zA-Z]+")){ 
      s.next(); 
     } 
     nameArray[i] = s.nextLine(); 
    } 

} 
+0

2つの値しか格納されていないことをどのように知っていますか?それは3回あなたに促しますか?あなたはサンプル入出力を持っていますか? – lucasvw

+0

next()、nextInt()またはnextFoo()メソッドを使用した後に[スキャナがnextLine()をスキップしている可能性があります](http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after- using-next-nextint-or-other-nextfoo) –

答えて

0

あなたが持っている2問題:あなたはあなたのintを読んだ後、あなたのスキャナをクリアする必要があり

  1. ですでにあなたの配列を初期化するのであなたのループは、0からnameArray-1に開始する必要がありますString nameArray[] = new String[numofstud];

Scanner s = new Scanner(System.in); 
System.out.println("Please enter the number of students: "); 

//  while (!s.hasNextInt()) { 
//   s.next(); 
//  } 
int numofstud = s.nextInt(); 
s.nextLine();//<<------------Clear your Scanner 

String nameArray[] = new String[numofstud]; 

//Loop from i = 0 to to i < nameArray.length 
for (int i = 0; i < nameArray.length; i++) { 
    System.out.println("Please enter the student's name: "); 
    while (!s.hasNext("[a-zA-Z]+")) { 
     s.next(); 
    } 
    nameArray[i] = s.nextLine(); 
}