IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java的scanner类以及throw_catch异常 -> 正文阅读

[Java知识库]java的scanner类以及throw_catch异常

就是说这个我在使用了throw_catch异常之后,编译器应该不在报错,然而使用了之后仍然报错,该问题可以仔细探讨,本文可能有一些出入,如果有疑问欢迎提出,共同探讨;若本文有不当之处,也请批评指正!
对于声明的Scanner对象,命名为input
当输入数字时,使用语句:

a=input.nextInt();

之后对这个nextInt使用throw_catch检查InputMismatchException,然而奇怪的是,检测之后,还会出错:

请输入整型数据。
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at exp2.ComputeTime.main(ComputeTime.java:22)

代码如下:


Scanner input=new Scanner(System.in);
while(1)
{
try {
	   a=input.nextInt();}
	  catch(java.util.InputMismatchException e)
	  {
		  System.err.println("请输入整型数据。");
		  a=input.nextInt();
		 // continue;
	  }
	  }

经过调试发现,遇到异常之后,进入到catch语句,然后执行到

 a=input.nextInt();

的时候,产生的异常,原因就是额,这个缓冲区的那个异常字符清不下去,然后会一直卡在那个字符上,就一直异常;
查找博客一共有两个解决方法:
清除缓冲区,但是没啥方法,不过可以用

input.nextline();

语句,从下一行开始输入,这个好使了,不卡在那个字符上了。

//运行结果
9.9
请输入整型数据。

或者,不在catch语句里面写

a=input.nextInt();

但是,如果运行这个代码,就会死循环,为啥捏?

Scanner input=new Scanner(System.in);
while(1)
{
try {
	   a=input.nextInt();}
	  catch(java.util.InputMismatchException e)
	  {
		  System.err.println("请输入整型数据。");
		 // continue;
	  }
	  }

结果大概是这样:

9.9
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。
请输入整型数据。

因为外面是个循环,用了catch语句之后,就输出那个错误提示不报错,所以回到try块里面,但是同刚才,一遇到那个input就会检测出异常又进入catch块里面了,寄了。然后就死循环。

那么能不能不在catch块里面写nextInt捏?可以,在try块里面声明一个scanner不就行了。。这样的话,每一次的缓冲区都是崭新的。亲测有效!
注:
关于清除缓冲区这件事,c能用flush,java就不清楚了
欢迎批评指正!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:11:18  更:2022-04-01 23:13:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:40:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码