-1

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

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

}

2 Answers2

0

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

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

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

Byb
  • 2,318
-1

Сделай:

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

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

Ewrey
  • 29
  • 7
  • А зачем нужна пустая строка в начале списка? Какой-то неправильный костыль получается. – Nowhere Man Feb 03 '23 at 08:19