Как я могу позволить пользователю нажать ввод для значения по умолчанию с помощью сканера в Java? - PullRequest
3 голосов
/ 24 августа 2009

Допустим, я хотел получить следующее приглашение:

"Введите число итераций (400):"

Где пользователь может ввести целое число или просто нажать ввод для значения по умолчанию 400.

Как я могу реализовать значение по умолчанию в Java, используя класс Scanner?

public static void main(String args)
{
    Scanner input = new Scanner(System.in);
    System.out.print("Enter the number of iterations (400): "); 
    input.nextInt();
}

Как видите, у меня должно быть «nextInt ()», как я могу сделать что-то вроде «nextInt или return?», И в этом случае, если это будет возвращение, я по умолчанию установлю значение 400. *

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 24 августа 2009

Я согласен с @pjp, что он ответил на ваш вопрос о том, как адаптировать сканер (я дал ему возможность проголосовать), но у меня сложилось впечатление, что использование сканера является излишним, если вы читаете только одно значение из stdin , Сканер кажется мне чем-то, что вы бы больше хотели использовать для чтения ряда входных данных (если вы этим занимаетесь, мои извинения), но в противном случае, почему бы просто не прочитать напрямую stdin? Хотя теперь, когда я смотрю на это, это довольно многословно;)

Вы, вероятно, также должны справиться с этим IOException лучше, чем я ...

public static void main(String[] args) throws IOException
{
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter the number of iterations (400): ");

    int iterations = 400;
    String userInput = input.readLine();

    //if the user entered non-whitespace characters then
    //actually parse their input
    if(!"".equals(userInput.trim()))
    {
        try
        {
            iterations = Integer.parseInt(userInput);
        }
        catch(NumberFormatException nfe)
        {
            //notify user their input sucks  ;)
        }
    }

    System.out.println("Iterations = " + iterations);
}
2 голосов
/ 24 августа 2009

Как мы узнали ранее, Сканер не рассматривает новую строку как токен. Чтобы обойти это, мы можем вызвать nextLine, а затем сопоставить его с помощью регулярного выражения.

public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);

    int val = 400;

    String line = scanner.nextLine();

            if (line.matches("\\d+")) {
        Integer val2 = Integer.valueOf(line);
        val=val2;
    }

    System.out.println(val);
}

Этот тип делает сканер избыточным. Вы можете также позвонить input.readLine().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...