Как заставить программу продолжать цикл до тех пор, пока пользователь не введет целое число

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

import java.util.InputMismatchException;
import java.util.Scanner;


public class CatchingException {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int score;
    String choice;


    try {
    System.out.println("Enter your percentage mark: ");
    score = scan.nextInt();


    do {
        if(score <40) {
            System.out.println("You FAILED");
        }else if(score >=40 && score <50){
            System.out.println("Your grade: PASS MARK");
        }else if(score >=50 && score <60) {
            System.out.println("Your grade: 2:2");
        }else if (score >=60 && score <70) {
            System.out.println("Your grade: 2:1");
        }else {
            System.out.println("Your grade: 1:1");
        }

        System.out.println("Do you want to enter another grade: ");
        choice = scan.next();
        if(choice.equalsIgnoreCase("yes")) {
            System.out.println("Enter your percentage mark: ");
                score = scan.nextInt();
                System.err.println("Incorrect Input");
            }
    }while();

    }catch(InputMismatchException e) {
        System.err.println("Incorrect Input ");
    }

    System.out.println("program terminated");
    scan.close();

}

  }

person Alex Smith    schedule 31.01.2015    source источник


Ответы (4)


Используйте логическую переменную, чтобы отслеживать, следует ли продолжать цикл. Например:

boolean loop = true;
do {
    // set loop to false when you want to end
} while(loop);
person Lesleh    schedule 31.01.2015

чтобы вы могли сделать:

int score = null;
boolean isInt = false;

do {
    System.out.println("Enter your percentage mark:");

    try {
        score = scan.nextInt();
        isInt = true;
    } catch (InputMismatchException e) {
        //Not An Integer
        isInt = false;
    }
} while(false)

//Do you if statements here if it gets out of the while loop which means the user entered an int
person Aadesh    schedule 31.01.2015

Вместо того, чтобы предполагать, что введенное число - это int, вы можете ввести его как String и цикл до тех пор, пока эта строка не будет представлять int:

int intScore;
String score;
boolean gotInt = false;
while (!gotInt) {
    score = scan.next();
    try {
        intScore = Integer.valueOf(score);
        gotInt = true;
    } catch (NumberFormatException e) {
        // output some warning
    }
}
person Mureinik    schedule 31.01.2015

Вы рассматривали возможность использования JOptionPane для получения информации от пользователя? Он может отображать небольшое окно с текстовым полем и кнопками ОК и Отмена, которые идеально подходят для ваших нужд.

Вот документация для JOptionPane # showInputDialog:

static String showInputDialog(Component parentComponent, Object message, String title, int messageType) 

Показывает диалоговое окно, запрашивающее ввод от пользователя, являющегося родителем parentComponent, с диалоговым окном, имеющим заголовок title и тип сообщения messageType.

person 1Darco1    schedule 31.01.2015