Scanner и List как построить ввод данных из консоли с записью в массив

Рейтинг: -1Ответов: 2Опубликовано: 02.02.2023

В общем вот мой код: сначала определяю кол-во эл-тов, потом пытаюсь каждому записать строку из консоли, что-то идет не так. Прошу разъяснений.

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class Test3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int employeeNumber = scanner.nextInt();

        System.out.println("en=" + employeeNumber);

        List<String> list = new ArrayList<>();

        for (int i = 0; i < employeeNumber; i++) {
            list.add(scanner.nextLine());
        }

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        System.out.println("s=" + list.size());
    }
}

Ответы

▲ 0Принят

После ввода размера списка методом nextInt() в буфере остаётся пустая строка и символ, означающий переход на новую строку. Метод nextLine() работает таким образом, что считывает всё, что было во введённой строке до символа перехода на новую строку, и затем переходит далее.

Когда вы вызываете этот метод для ввода элементов списка в цикле, сначала он считывает ту самую пустую строку, и только затем начинает считывать вновь вводимые данные. То есть, в той программе, которую вы привели, первым элементом списка будет пустая строка.

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

▲ -1

Сделай:

for (int i = 0; i <= employeeNumber; i++) {
            list.add(scanner.nextLine());
        }

Тогда у тебя лист на 1 значение больше, но результат корректный. Вся проблема в том, что ты не ожидаешь в коде начала строк, и у тебя строка en= сразу записывается как пустая, если ее показывать позже, то все ок.