Как написать метод, который выполняет, когда пользователь нажимает только Enter? - PullRequest
0 голосов
/ 14 марта 2012

Я хочу написать бесконечное выражение while, которое будет выполняться каждый раз, когда пользователь просто нажимает Enter. Каждый читатель потока, которого я знаю, выполняет, когда пользователь вводит что-либо в консоль или нажимает Enter дважды.


Я хочу написать что-то вроде этого:

Консоль:
выход 1 [ввод был нажат один раз]
выход 2 [ввод был нажат один раз]
выход 3 [ввод был нажат один раз]
[так далее ...]

Это мой текущий код:

addQuestionsInArray();

Random r = new Random();
DataInputStream is = new DataInputStream(System.in);
while (true) {
    String question = questionsList.get(r.nextInt(questionsList.size()));
    System.out.println(question);
    if (String.valueOf(is.readInt()).equals("0")) {
        break;
    }
}

Ответы [ 3 ]

8 голосов
/ 14 марта 2012

Чтобы дождаться, когда пользователь нажмет ввод, я обычно делаю что-то вроде

new Scanner(System.in).nextLine();

Демо:

import java.util.Scanner;

class Test {
    public static void main(String[] args) {
        System.out.println("Press enter.");
        new Scanner(System.in).nextLine();
        System.out.println("Thanks.");
    }
}

Выход:

Press enter.
[enter]
Thanks.

Что касается ваших правок, я все же предлагаю вам использовать Scanner.(DataInputStream следует использовать для двоичных данных, а не строк и символов, написанных на System.in):

Scanner s = new Scanner(System.in);

while (true) {
    String question = questionsList.get(r.nextInt(questionsList.size()));
    System.out.println(question);

    String input = s.nextLine();
    // int input = s.nextInt();    if you want integers

    if (input.equals("0"))
        break;

    // if (input == 0) break;      if you want integers
}
2 голосов
/ 14 марта 2012

Вы можете определить Thread, который с указанным временным интервалом проверяет ввод пользователя с помощью оператора System.in.read() и, если равен Enter character /n/r, завершает основной цикл

1 голос
/ 14 марта 2012

В этом случае вам потребуется слушатель действия .

Вот еще один вопрос SO, касающийся слушателей действий и клавиши ввода.

...