Java - цикл while для проверки сканера приводит к неудачному вводу - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь добавить следующую проверку сканера следующим образом:

public void promptFilmRating() {
    while (!filmScanner.hasNextInt()) {
        System.out.println("Please enter a number instead of text.");
        filmScanner.next();
    }
    while (filmScanner.nextInt() > 5 || filmScanner.nextInt() < 1) {
        System.out.println("Your number is outside of the rating boundaries, enter a number between 1 and 5.");
        filmRatingOutOfFive = filmScanner.nextInt();
    }

}

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

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Я считаю, что ваша проблема в while (filmScanner.nextInt() > 5 || filmScanner.nextInt() < 1) {. Каждый вызов filmScanner.nextInt() запрашивает у потока новое целое число, поэтому, дважды вызывая .nextInt() в операторе while, вы запрашиваете два числа.

Возможно, вы захотите объединить две петли в одну. Пример:

int myNum;
do {
    myNumb = filmScanner.nextInt();
} while (myNum > 5 || myNum < 1);
0 голосов
/ 05 мая 2018

Сохраните полученное значение в переменной и используйте эту переменную для выполнения проверок.

Вот пример:

private void promptFilmRating() {

    Scanner filmScanner = new Scanner(System.in);
    int filmRatingOutOfFive;

    do{
        System.out.println("Please enter your rating for the film:");
        filmRatingOutOfFive = filmScanner.nextInt();

        if(filmRatingOutOfFive > 5 || filmRatingOutOfFive < 1)
            System.out.println("Your number is outside of the rating boundaries, enter a number between 1 and 5.");

    }while(filmRatingOutOfFive > 5 || filmRatingOutOfFive < 1);


    System.out.println("You rated this film: "+filmRatingOutOfFive+" out of 5");


}
...