Проясните механизм работы Scanner
Вот такой код не работает как хочется:
public class Dialog {
private static Scanner input = new Scanner(System.in);
static void askWhatToDo (){
System.out.println("what to do?");
byte answer = input.nextByte(); //всё хорошо, даёт ввести число
Dialog.nextOperation();
}
static void nextOperation (){
System.out.println("Input name: ");
String name = input.nextLine(); //не даёт возможности ввода, просто проскакивает
}
}
Если же я создаю новый объект Scanner в методе nextOperation, то всё в порядке:
static void nextOperation (){
System.out.println("Input name: ");
Scanner input = new Scanner (System.in);
String name = input.nextLine(); //всё работает, ждёт пока я введу строку
}
Почему не подходит уже созданный статический экземпляр объекта Scanner?
Ответы (1 шт):
Автор решения: Chubatiy
→ Ссылка
Используйте next(), а не nextLine().
nextLine() читает c начала до конца текущей строки. А натыкается на символ перевода строки от прошлого ввода(\n)
То есть вы ввели 1 и нажали Enter В итоге получается что вам вернулось 1, а символ \n остался в "буффере".
После вызова nextLine() начинает читать с начала и натывается сразу на \n. Поэтому и прерывает работу.