Хранить строки в зубчатом массиве, используя для цикла

Я сталкивался с этим вопросом и хочу воссоздать его, но заполнить его массивом строк вместо целых чисел. Я хочу использовать массивы, а не ArrayList только потому, что я новичок и хотел бы больше практиковаться с массивами. Я в значительной степени скопировал код, но получаю ошибку в выводе. Вот мой код:

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

Мой вывод:

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

Почему он печатает "Введите строку" дважды каждый раз? Логика имеет смысл для меня, поэтому я не уверен, что вызывает неправильный вывод. Это цикл for или просто как работают строки? Объяснение и помощь с кодом будет принята с благодарностью. Спасибо

2 ответа

Решение

Логика верна, но nextInt() Метод читает только число, а не вводимый после него символ "ввод", поэтому при вызове nextLine() метод, первый раз в вашем цикле он читает этот символ "ввод", второй читает ваш ввод и так третий. Чтобы избежать этой проблемы, вы можете позвонить nextLine() сразу после nextInt()без присвоения его переменной, так что он читает ожидающий символ:

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

Проблема только в том, что input.nextInt() не захватывает новую строку. Если вы просто вставляете input.nextLine() после каждой из строк input.nextInt(), это должно работать.

Другие вопросы по тегам