本意是:
键盘输入,输入非数字的值,会出现报错(Exception in thread “main” java.util.InputMismatchException),无法运行,想使用while循环和hasNextInt,进行判断,判断键盘输入的值是否为数字,如果true,则将键盘输入的值进行保存,如果false,则循环再次键盘输入值,直到输入的值为数字
解决报错问题
1.利用try-catch捕获异常,每次输入不匹配的时候我们就抛出一个提示,让其重新输入,直到输入正确的数据类型为止。
链接:scanner中InputMisMatchException处理:.
2.while循环加hasNextInt
然后while循环加hasNextInt出现死循环
例如(错误代码)
package demo01;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
boolean bool;
int a=0;
Scanner input = new Scanner(System.in);
System.out.print("请输入操作数字:");
while(true)
{
bool = input.hasNextInt();
if(!bool)
{
System.out.print("请重新输入操作数字:");
}
else
{
a = input.nextInt();
break;
}
};
System.out.print(a);
}
}
原因:
hasNextInt()有点像缓存的机制,当调用它的时候,它的空间会存入一个值,再次调用不会覆盖或者增加,而是保持原来的值。当调用next()会将空间中的值给next,同时清空它空间中的值。
修改后代码:
package demo01;
import java.util.Scanner;
public class Test06 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
boolean bool;
int a=0;
Scanner input = new Scanner(System.in);
System.out.print("请输入操作数字:");
while(true)
{
bool = input.hasNextInt();
if(!bool)
{
String str = input.next();//释放hanNextInt空间中的值
System.out.print("请重新输入操作数字:");
}
else
{
a = input.nextInt();
break;
}
};
System.out.print(a);
}
}
运行结果: