0

Всем привет!

Пытаюсь считать с консоли команду и выполнить действия в зависимости от неё. Но, при выполнении String query = sc.nextLine(); внутри цикла ввод с клавиатуры не ожидается и цикл переходит сразу на следующую итерацию i = 1. Как заставить подождать ввод с клавиатуры?

Scanner sc = new Scanner(System.in);
int q = sc.nextInt();
        for (int i = 0; i < q; i++) {
            String query = sc.nextLine();
            if (query.equalsIgnoreCase("Insert")) {
                int x = sc.nextInt();
                int y = sc.nextInt();
                myList.add(x, y);
            } else if (query.equalsIgnoreCase("Delete")) {
                int x = sc.nextInt();
                myList.remove(x);
            }
        }

ezulex
  • 7

1 Answers1

0

Scanner работает так, что когда вы считываете sc.nextInt() и нажимаете Enter в вашей консоли, он оставляет перевод строки не считанным и запоминает его. Как только он наткнулся на sc.nextLine(), он это перевод видит и берет его в виде пустой строки.

Чтобы такого не происходило, при работает со Scanner надо предварительно очищать его от таких переводов строки, которые в нем остались if (sc.hasNextLine()) sc.nextLine();.

Scanner sc = new Scanner(System.in);
int q = sc.nextInt();
if (sc.hasNextLine()) sc.nextLine();

for (int i = 0; i < q; i++) { System.out.println("q"); String query = sc.nextLine(); if (query.equalsIgnoreCase("Insert")) { int x = sc.nextInt(); int y = sc.nextInt(); if (sc.hasNextLine()) sc.nextLine(); } else if (query.equalsIgnoreCase("Delete")) { int x = sc.nextInt(); if (sc.hasNextLine()) sc.nextLine(); } }

Alex Krass
  • 17,744