Подскажите, пожалуйста, почему так происходит, что при именно консольном вводе количества ячеек в массиве, происходит проблема, что первую (нулевую) ячейку не дает заполнить. Если вводить явно, не с консоли, все работает. И при смене типа данных на целочисленные тоже всё ок. Вроде бы код не отличается от лекционного
Marina Pilipenko
23 уровень
Размер массива не задается с консоли верно
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
11 августа 2022, 16:19решение
Потому что это особенность работы сканера, которую нужно учитывать.
Дело в том, что все методы next~: nextInt(), nextBoolean() и пр., кроме nextLine(), они не "вычитывают" из потока разделитель.
То есть когда ты вводишь числа отдельными строками, у тебя в систем.ин содержится следующее: "4\nстрока\n.....", где \n - это перевод строки от нажатия энтера. Задача метода nextInt - прочитать из потока число, он находит число 4, переводит указатель, с какого символа нужно будет дальше продолжить чтение сразу после этого числа. Т.е. для прочтения числа остаётся "\nстрока\n", а метод nextLine() читает дальше, пока не встретит ближайший разделитель \n, считывает вместе с разделителем, выкидывает сам разделитель и возвращает то, что осталось. Поскольку разделитель стоит в самом начале, то он возвращает пустую строку.
Резюмируя, в целом я не советую комбинировать использование nextLine с остальными методами, потому что ошибки будут появляться. Лучше заменить nextInt() на Integer.parseInt(scanner.nextLine()), тогда все разделители будут прочитаны.
Можно сделать костыль с "холостым" прочтением лишней пустой строки перед заполнением массива, но костыль - он и есть костыль.
+2
Marina Pilipenko
11 августа 2022, 16:39
спасибо большое, поняла!
0