2017-04-21 2 views
-1

J'ai une méthode qui invite l'utilisateur à saisir des nombres entiers et fait de cette entrée la longueur du tableau de chaînes. Le problème semble être lors de l'itération sur le tableau ... Si je tape 3 comme "numofstud", il n'enregistrera que deux valeurs. J'ai essayé d'ajouter for (int i = 0; i < nameArray.length + 1; i++) mais cela ne m'a donné qu'une erreur ArrayIndexOutOfBounds ...Tableaux itinérants java

Quelqu'un peut-il me dire où est mon erreur lors de l'itération sur la matrice. Merci

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

Comment savez-vous qu'il ne stocke que deux valeurs? Cela vous invite-t-il trois fois? Avez-vous un exemple d'entrée/sortie? – lucasvw

+0

Copie possible de [Scanner saute nextLine() après avoir utilisé next(), nextInt() ou d'autres méthodes nextFoo()] (http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after- en utilisant-next-nextint-ou-autre-nextfoo) –

Répondre

0

Vous avez deux problèmes:

  1. Vous devez effacer votre scanner après avoir lu votre int
  2. Votre boucle devrait commencer 0-nameArray-1, parce que vous initialisez déjà votre tableau avec String nameArray[] = new String[numofstud];

Essayez d'utiliser ceci à la place:

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(); 
}