Java,使用 Scanner 尝试捕获

pav*_*hra 5 java input try-catch java.util.scanner inputmismatchexception

我正在创建一个小算法,这是其中的一部分。

如果用户输入非整数值,我想输出一条消息并让用户再次输入一个数字:

boolean wenttocatch;

do 
{
    try 
    {
        wenttocatch = false;
        number_of_rigons = sc.nextInt(); // sc is an object of scanner class 
    } 
    catch (Exception e) 
    {
        wenttocatch=true;
        System.out.println("xx");
    }
} while (wenttocatch==true);
Run Code Online (Sandbox Code Playgroud)

我得到了一个永无止境的循环,我不知道为什么。

如何识别用户是否输入了一些非整数?
如果用户输入一个非整数,我如何要求用户再次输入?

更新
当我打印异常时,我收到“InputMismatchException”,我该怎么办?

Jam*_*hin 5

Scanner不前进,直到该项目被读取。这在Scanner JavaDoc 中提到。因此,您可以使用.next()方法hasInt()读取int值或在读取值之前检查是否。

boolean wenttocatch;
int number_of_rigons = 0;
Scanner sc = new Scanner(System.in);

do {
    try {
        wenttocatch = false;
        number_of_rigons = sc.nextInt(); // sc is an object of scanner class
    } catch (InputMismatchException e) {
        sc.next();
        wenttocatch = true;
        System.out.println("xx");
    }
} while (wenttocatch == true);
Run Code Online (Sandbox Code Playgroud)


小智 5

您不必尝试尝试。此代码将为您解决问题:

public static void main(String[] args) {
    boolean wenttocatch = false;
    Scanner scan = new Scanner(System.in);
    int number_of_rigons = 0;
    do{
        System.out.print("Enter a number : ");
        if(scan.hasNextInt()){
            number_of_rigons = scan.nextInt();
            wenttocatch = true;
        }else{
            scan.nextLine();
            System.out.println("Enter a valid Integer value");
        }
    }while(!wenttocatch);
}
Run Code Online (Sandbox Code Playgroud)