next数值型数据类型()出现输入错误后,下次依然能正常输入

next数值型数据类型()出现输入错误后,下次依然能正常输入

1 出现的场景

1.1 内容

next数值型数据()方法指的是nextInt()、nextDouble()、nextByte()等数值型接收方法

用try…catch将数字型接收方法包起来,当输入是字符串时,程序依然不会中断,会提示用户再次输入,再次调用nextInt()方法时,会发现用户直接输入不了了,直接进入死循环了,但是一直有输入提示语句

1.2 示例代码

package Work;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
       Scanner s=new Scanner(System.in);
       boolean flag=true;
        //当不出现异常时,就设置为false,就退出循环
       int n=0;
       while(flag){
           System.out.println("请输入数字n:");
           try {
               n=s.nextInt();
               flag=false;
           } catch (InputMismatchException e) {
               System.out.println("输入有误,请重新输入!!!!");
           } catch (Exception e){

           }
       }
    }
}

1.3 示例代码运行

在这里插入图片描述

2 为啥出现这个问题

用nextInt()方法去接收用户输入的数据时,会先检查空间里面是否存在数据,若不存在才会需要用户输入一个数据后,输入完数据并按下回车后才会执行下一条语句,此时会先把用户的数据放入一个空间

当用户输入的类型和nextInt()的方法是匹配成功的,就会把空间里面存放的数据拿出来,然后把空间里面的值清空

当用户输入的类型和nextInt()的方法匹配不成功时,此时空间里面的值不会被拿出来,你下次调用nextInt()的时候还是拿的这个值,因为空间里面可以拿到值就无需用户去输入值,而且用try…catch处理异常了,这程序就不会被中断,所以程序就一直执行下去了

3 如何解决这个问题

3.1 核心点

你要把在空间中的错误信息给吸收并释放掉

3.2 解决方案

在catch代码块里面写上next()方法用于接收空间中的错误信息,使得空间中的数据能够被释放

3.3 解决的示例代码

package Work;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        Scanner s=new Scanner(System.in);
        boolean flag=true;
        //当不出现异常时,就设置为false,就退出循环
        int n=0;
        while(flag){
            System.out.println("请输入数字n:");
            try {
                n=s.nextInt();
                flag=false;
            } catch (InputMismatchException e) {
                s.next();
                //用于吸收掉前面输入的错误信息
                System.out.println("输入有误,请重新输入!!!!");
            } catch (Exception e){

            }
        }
        System.out.println("程序正常结束了!!!");
    }
}

3.4 解决示例截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值