Хранить строки в зубчатом массиве, используя для цикла
Я сталкивался с этим вопросом и хочу воссоздать его, но заполнить его массивом строк вместо целых чисел. Я хочу использовать массивы, а не 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(), это должно работать.