2017-09-22 1 views
1

Je suis tombé sur ce question et je veux le recréer mais le remplir avec un tableau de chaînes au lieu d'entiers. Je veux utiliser des tableaux et non ArrayList juste parce que je suis un débutant et que je voudrais m'entraîner davantage avec des tableaux. J'ai copié le code à peu près mais je continue d'avoir une erreur dans la sortie. Voici mon code:stocker des chaînes dans un tableau en dents de scie en utilisant pour la boucle

Scanner input = new Scanner(System.in); 
    System.out.print("Enter number of arrays: "); 
    int x = input.nextInt(); 
    String [][] array = new String[x][0]; 

    for(int i = 0; i < x; i++){ 
     System.out.print("Enter number of elements for array: "); 
     int s = input.nextInt(); 
     array[i] = new String[s]; 

     for(int j = 0; j < s ; j++){ 
      System.out.print("Enter string: "); 
      String word = input.nextLine(); 
      array[i][j] = word; 
     } 
    } 

Ma sortie est:

Enter number of arrays: 2 
Enter number of elements for array: 3 
Enter string: Enter string: hello 
Enter string: hi 
Enter number of elements for array: 2 
Enter string: Enter string: goodbye 

Pourquoi faut-il imprimer "Entrez chaîne" deux fois à chaque fois? La logique a du sens pour moi, donc je ne suis pas sûr de ce qui cause la mauvaise sortie. Est-ce la boucle for ou juste la façon dont les chaînes fonctionnent? Explication et aide avec le code serait appréciée. Merci

Répondre

1

La logique est correcte, mais la méthode nextInt() ne lit que le nombre et non le vous tapez après « entrer » caractère, donc lorsque vous appelez ensuite la méthode nextLine(), la première fois dans votre boucle il lit que « entrer 'caractère, la seconde lit votre entrée et ainsi le troisième. Pour éviter ce problème, vous pouvez appeler un nextLine() juste après la nextInt(), sans lui assigner à une variable, donc thath il lit le caractère en attente:

for(int i = 0; i < x; i++){ 
    System.out.print("Enter number of elements for array: "); 
    int s = input.nextInt(); 
    input.nextLine(); 
    array[i] = new String[s]; 

    for(int j = 0; j < s ; j++){ 
     System.out.print("Enter string: "); 
     String word = input.nextLine(); 
     array[i][j] = word; 
    } 
1

Le problème est juste que input.nextInt() n » t attrape la nouvelle ligne. Si vous venez de coller input.nextLine() après chacune des lignes input.nextInt(), cela devrait fonctionner.