public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int num = 1;
while (true)
{
System.out.println("请输入第"+ num +"个整数");
try
{
int i = scanner.nextInt();
num++;
break;
}
catch (Exception e)
{
System.out.println("输入有误,请务必输入整数!");;
String s1=scanner.nextLine();//目的是为了吃掉错误信息和换行符
}
}
/**
* 输入整数 正常运行
* 输入非整数 无限循环
*
* 加入String s1=scanner.nextLine();接收换行符后正常运行。
*/
//nextInt()是忽略回车和空格直到遇到第一个数字开始录入,只会把数字录入cache,
// 遇到空格或者回车结束nextInt()的输入。
//所以nextInt()连用是没有问题的。因为换行符虽然没有被吃掉,但是nextInt会忽略换行符
//nextInt录入成功的话 结束后会把clearCache(),把录入的数字清空。//看源码。
// 但是换行符没有清空。nextLine()录入所有东西到cache,会把换行符录入,直接结束nextLine();
//但是nextInt录入失败的话 不会有clearCache()。
//所以录入的错误信息都还在,不会消失。nextInt()继续接受错误信息。
//所以上边try catch 会出现无限循环的情况
//next():
scanner.next();
scanner.nextLine();
System.out.println("++++++++");
scanner.nextLine();
System.out.println("++++++++");
scanner.next();
/**运行结果:
* 输入 阿萨德
* 输出 ++++++++
* 输入 阿萨德
* 输出 ++++++++
* 输入 阿萨德
*/
scanner.next();
System.out.println("++++++++");
scanner.next();
//next()和nextInt()一样。
//所有录入方法,刚开始录入的时候都会忽略换行符。
}
Scanner中next(),nextInt(),nextLine()关于换行符的坑,包括try()catch{}
最新推荐文章于 2023-05-06 15:42:39 发布