Придется вводить дважды после проверки (Java)

avatar
uzumaki_jenki
7 апреля 2018 в 23:23
49
1
-2

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

Это мой код:

System.out.println("Enter First Name");
        queueArray[last].setfName(in.next().toUpperCase());  

        while(!in.next().matches("[a-zA-Z,]+")){
            System.out.println("Invalid Input");
            System.out.printLn("Enter First Name");
            queueArray[last].setfName(in.next().toUpperCase()); 
        }

Я не уверен, какая часть кода вызывает эту проблему.

Источник
Hovercraft Full Of Eels
7 апреля 2018 в 23:24
2

Сначала поместите in.next() в переменную, прежде чем проверять, соответствует ли она чему-либо. Что еще более важно, научитесь проходить мысленно (или на бумаге) по своему коду и визуализировать то, что он делает во время выполнения. Это необходимый навык, который вам нужно улучшить, если вы хотите прогрессировать.

khelwood
7 апреля 2018 в 23:25
1

Вы звоните next() один раз по линии while и еще раз по линии setfName. Каждый вызов next получает новый ввод.

Stephen C
7 апреля 2018 в 23:31
1

Я рекомендую вам прочитать "Как отлаживать небольшие программы"

uzumaki_jenki
8 апреля 2018 в 00:14
0

@HovercraftFullOfEels Спасибо за совет, буду иметь в виду.

Ответы (1)

avatar
Raymo111
7 апреля 2018 в 23:42
-1

Возможное решение:

System.out.println("Enter First Name");
String input = in.next();
queueArray[last].setfName(input.toUpperCase());  

while(!input.matches("[a-zA-Z,]+")){
    System.out.println("Invalid Input");
    System.out.printLn("Enter First Name");
    queueArray[last].setfName(in.next().toUpperCase()); 
}