Как отбросить нерелевантный ввод со сканера (System.in) - PullRequest
0 голосов
/ 01 мая 2020

Я хочу, чтобы сканер отбросил ввод, полученный после определенного момента.

Процесс должен выглядеть следующим образом:

  1. принимать данные с консоли
  2. отменять все остальное
  3. снова принимать данные с консоли

и т. Д.

Я безуспешно пробовал пару решений:

  • создание метода flu sh, который очищает сканер перед каждым новым запрошенный ввод, такой как

    public void flush() {
       while(scanner.hasNextLine()) 
          scanner.nextLine();
    }
    

и вызов его перед каждым новым полезным вызовом input.nextLine().

  • создание нового сканера для каждого нового полезного ввода, с целью игнорирования ввода, переданного перед его созданием.

Первое решение не работает, потому что hasNextLine() блокирует поток, пока не будет написана новая строка, и никогда не вернет false, когда читать нечего.

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

Любое предложение очень приветствуется.

Редактировать для контекста:

Есть два клиента и сервер, в то время как один клиент запрашивает вход у сервера, другой - показано какое-то сообщение, например Waiting for player1 to play his turn.... Однако, когда наступает очередь «ожидающего» клиента, если он что-то пишет в период ожидания, он будет принят как фактический вход для первого запроса ввода, следующего за периодом ожидания. Я пытаюсь отбросить / игнорировать все, что написано в этот период, и делаю это локально (на клиенте).

...