Ожидать в цикле ввод с консоли
Всем привет!
Пытаюсь считать с консоли команду и выполнить действия в зависимости от неё.
Но, при выполнении 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);
}
}
Ответы (1 шт):
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();
}
}