当程序需要整数时用户输入字符串时,如何阻止程序终止?

use*_*240 3 java exception-handling exception do-while java.util.scanner

我正在尝试设置一个do-while循环,它会重新提示用户输入,直到他们输入一个大于零的整数.我不能使用try-catch; 这是不允许的.这是我得到的:

Scanner scnr = new Scanner(System.in);
int num;
do{
System.out.println("Enter a number (int): ");
num = scnr.nextInt();
} while(num<0 || !scnr.hasNextLine());
Run Code Online (Sandbox Code Playgroud)

如果输入负数,它将循环,但如果是字母,则程序终止.

Mic*_*ski 5

您可以将其作为字符串,然后使用正则表达式来测试字符串是否只包含数字.因此,num如果它实际上是整数,则只分配字符串的整数值.这意味着你需要初始化num-1,如果它不是一个整数,while条件将为true,它将重新开始.

Scanner scnr = new Scanner(System.in);
int num = -1;
String s;
do {
    System.out.println("Enter a number (int): ");
    s = scnr.next().trim(); // trim so that numbers with whitespace are valid

    if (s.matches("\\d+")) { // if the string contains only numbers 0-9
        num = Integer.parseInt(s);
    }
} while(num < 0 || !scnr.hasNextLine());
Run Code Online (Sandbox Code Playgroud)

样品运行:

Enter a number (int): 
-5
Enter a number (int): 
fdshgdf
Enter a number (int): 
5.5
Enter a number (int): 
5
Run Code Online (Sandbox Code Playgroud)