Как повторить вопрос пользователю до тех пор, пока условие l oop не станет ложным? - PullRequest
0 голосов
/ 07 марта 2020

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

ниже - мой пример кода.

Scanner scanner = new Scanner(System.in);
int userInput = 0;
do {
       AskQuestion();
       if(scanner.hasNextInt()) {
          userInput = scanner.nextInt();
    }
}
while(!scanner.hasNextInt()) ;

Хотя я знаю, что это можно сделать в C#, я не совсем уверен, как это сделать в java, не застревая в бесконечном l oop. Как мне заставить мой код делать то, что я хочу? Пожалуйста, помогите!

Ответы [ 4 ]

2 голосов
/ 07 марта 2020

Вы можете использовать что-то вроде этого. Это довольно простой флаг в сочетании с использованием класса Scanner.

    boolean flag = false;
    int val = 0;
    while(!flag){
        System.out.println("Something");
        if(sc.hasNext()){
            if(sc.hasNextInt()){
                val = sc.nextInt();
                flag = true;
            }
            else{
                sc.next();
            }
        }
    }
2 голосов
/ 07 марта 2020

Другая альтернатива, в которой используется метод Scanner # nextLine () вместе с методом String # match () и небольшим регулярным выражением (RegEx) для убедитесь, что указанная строка действительно содержит все числовые цифры:

Scanner scanner = new Scanner(System.in);
String userInput = "";
int desiredINT = 0;  // Default value.
while (desiredINT == 0) {
    AskQuestion();
    userInput = scanner.nextLine();
    if (userInput.matches("\\d+")) {
        desiredINT = Integer.parseInt(userInput);
        if (desiredINT < 1 || desiredINT > 120) {
            System.out.println("Invalid Input! The age supplied is not "
                             + "likely! Enter a valid Age!");
            desiredINT = 0;
        }
    } 
    else {
        System.out.println("Invalid Input! You must supply an Integer "
                         + "value! Try Again...");
    }
} 
System.out.println("Your age is: --> " + desiredINT);

и метод AskQuestion () :

private void AskQuestion() {
    System.out.println("How old are you?");
}
2 голосов
/ 07 марта 2020

Попробуйте это:

Scanner scanner = new Scanner(System.in);
int userInput;
while(true) {
    AskQuestion();
    if (scanner.hasNextInt()) {
        userInput = scanner.nextInt();
        break;
    }
    scanner.next(); // consume non-int token
}
1 голос
/ 07 марта 2020

Это хороший и короткий

Scanner scanner = new Scanner(System.in);
do askQuestion();
while(!scanner.nextLine().trim().matches("[\\d]+"));

Скажите, если вам нравится

Примечание это просто скажу, если число было целым числом, и повторяет, если нет, но не возвращает тебе этот int, скажи мне, если тебе это нужно, я найду способ

...