java中的小问题- 数字格式异常(备忘)

几周前遇到的一个小问题,突然想起,来补咯!(拖延这毛病真阔怕!)

7-1 数字格式异常 (10 分)
(NumberFormatException数字格式异常)编写一个程序,提示用户读取两个整数,然后显示他们的和。程序应该在输入不正确时提示用户再次输入数字。

输入格式:
i 9 (第1次输入) l 8 (第2次输入) 5 6 (第3次输入)

输出格式:
Incorrect input and re-enter two integers: (第1次输出提示) Incorrect input and re-enter two integers: (第2次输出提示) Sum is 11 (输出结果)

输入样例:

i 9
l 8
5 6

输出样例:

Incorrect input and re-enter two integers:
Incorrect input and re-enter two integers:
Sum is 11
import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner input= new Scanner(System.in);
        int a,b;
        while(true) {
        	try {
        		 a=input.nextInt();
        	    b=input.nextInt();
        	    System.out.println("Sum is "+(a+b));
        	}
        	catch (InputMismatchException e) {
                 System.out.println("Incorrect input and re-enter two integers:");
                 //*************************************************
                 input.nextLine(); //注意:及其重要,要是没有它,就会出现死循环  
                 //*****************************************************
                 continue;
        	}
        	break;
        }
	}
}

正确运行结果:
在这里插入图片描述

注意:上面代码中两行*********中间的input.nextLine();,非常,非常重要!!! 如果少了它,就会出现循环输出Incorrect input and re-enter two integers:的情况,为什么会出现这种问题呢?
`起初,我以为只是因为nextInt()不接收换行符,之后catch到的异常都是因为有换行符的存在才导致。但始终觉得解释不通,结果经过查找和看别人的例子,还真是想的太少了。

下面即为完整的原因:
首先,nextInt如果没有读取到整数,一方面报异常,另一方面,输入流中的指针不会后移, 所以,上面代码由于第一次输入的非整数的数值没有被读取,catch中如果没有nextLine,则输入流中的指针依然不后移,第二次循环重新input.nextInt(),因为输入未变,仍然发生异常。依次,后面的异常也是这样发生的。

如果catch中使用input.nextLine();语句,则catch中nextLine()会将当前行一直到回车换行符的内容读去,输入流执行下一行,即若a或者b在某次输入中不是整数,input.nextLine();语句会读取回车符前面没有被读取的非整数而不输出,这样,当循环上去,重新nextInt()的时候,就不会和之前的输入有牵扯,而是由新的输入决定。

提醒自己:及时记录!及时记录!及时写博客!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值