Я хочу, чтобы сканер отбросил ввод, полученный после определенного момента.
Процесс должен выглядеть следующим образом:
- принимать данные с консоли
- отменять все остальное
- снова принимать данные с консоли
и т. Д.
Я безуспешно пробовал пару решений:
создание метода flu sh, который очищает сканер перед каждым новым запрошенный ввод, такой как
public void flush() {
while(scanner.hasNextLine())
scanner.nextLine();
}
и вызов его перед каждым новым полезным вызовом input.nextLine()
.
- создание нового сканера для каждого нового полезного ввода, с целью игнорирования ввода, переданного перед его созданием.
Первое решение не работает, потому что hasNextLine()
блокирует поток, пока не будет написана новая строка, и никогда не вернет false
, когда читать нечего.
Я не уверен, почему второе решение не работает. Вновь созданный сканер принимает входные данные, записанные до его создания, поэтому я полагаю, что nextLine()
принимает все байты ввода, записанные в консоли, даже до его создания.
Любое предложение очень приветствуется.
Редактировать для контекста:
Есть два клиента и сервер, в то время как один клиент запрашивает вход у сервера, другой - показано какое-то сообщение, например Waiting for player1 to play his turn...
. Однако, когда наступает очередь «ожидающего» клиента, если он что-то пишет в период ожидания, он будет принят как фактический вход для первого запроса ввода, следующего за периодом ожидания. Я пытаюсь отбросить / игнорировать все, что написано в этот период, и делаю это локально (на клиенте).