首页 > 编程语言 >在处理用户输入时,当捕获到异常后,需要适当的清理输入流,以确保程序可以正确继续执行

在处理用户输入时,当捕获到异常后,需要适当的清理输入流,以确保程序可以正确继续执行

时间:2024-08-01 14:39:27浏览次数:13  
标签:继续执行 捕获 System nextInt catch out 输入 scanner

问题描述

代码示例

public class Example {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true){
            System.out.print("正常输入一个数字: ");
            int anInt = scanner.nextInt();//正常输入
            try {
                //错误输入的字符
                System.out.print("输入账号: ");
                int username = scanner.nextInt();
                System.out.print("输入密码: ");
                int passWorld = scanner.nextInt();
                System.out.println("账号: "+username+"密码: "+passWorld);
                break;
            } catch (Exception e) {
                System.out.println("非法输入,请重试");
            }

        }
    }
}

上面代码运行之后,错误输入字符之后。

产生原因

​ 用户输入非法字符串作为账号和密码时,会导致scanner.nextInt()方法抛出InputMismatchException异常。这个异常捕获后会进入到catch快中,输入提示。然后继续循环。

​ 由于异常没有处理,输入流中的非法字符串仍然存在,下一次循环时,scanner.nextInt()会尝试读取这个非法字符串,但由于它无法转换为整数,又会抛出相同的异常。

解决方案

  1. 在catch块中添加代码来清除输入流中的非法字符串,以确保下一次输入可以正常运行,在catch块中添加scanner.next()来读取并丢弃输入流中的非法字符串,使得下一次循环可以正常进行。

  2. 使用完scanner之后直接关闭close,使用的时候再创建,当然不推荐这种方式,资源开销大。

  3. 使用的Scanner里面的hasNextInt()方法替代nextInt()方法做判断。

标签:继续执行,捕获,System,nextInt,catch,out,输入,scanner
From: https://www.cnblogs.com/sixty-thousand/p/18336624

相关文章

  • Vue3选择框选择不同的值输入框刷新变化
    场景:新增的时候根据选择框的不同来改变输入信息例如:实现方式:这个输入框我做的是业务字典实际的值是0和1,在点击选择框的时候用v-if判断选择的值是1还是0,如果是0则是一个输入信息,如果是1则又是另一个输入信息。实现代码片: <el-row:span="24"v-if="formData.courseTyp......
  • 在Python中,如何在一段时间内接受输入
    我正在尝试用Python制作一个蛇游戏,但不知道如何制作它,以便蛇在没有玩家输入的情况下继续移动,所以如果有人知道一个简单的方法来做到这一点,我需要在2秒后取消输入将不胜感激代码如下:importrandomimportsysplayerY=(1)playerX=(0)appleY=random.randint(1,10)appl......
  • 编写一个程序,提示用户输入3组数,每组数包含5个double类型的数(假设用户都能正确的响应,不
    /编写一个程序,提示用户输入3组数,每组数包含5个double类型的数(假设用户都能正确的响应,不会输入非数值数据)。该程序应完成下列任务。a.把用户输入的数组都放在35的数组中b.计算每组(5个)数组的平均值c.计算所以数据的平均值d.找出这15个数据中的最大值e.打印结果*/#include<s......
  • 异常概述及其抛出与捕获机制
    文章目录一、异常概述1.1什么是异常1.2引入异常的好处1.3异常处理流程1.4异常处理机制的要求二、异常类型2.1异常类别2.2Exception类的层次三、抛出异常3.1throws关键字3.2throw关键字3.3链式异常3.4throw和throws的区别四、捕获异常(异常处理程序)4.1......
  • 多输入多输出预测:在Scikit-Learn中打造灵活的机器学习模型
    多输入多输出预测:在Scikit-Learn中打造灵活的机器学习模型在机器学习领域,Scikit-learn(简称sklearn)是一个功能强大且广泛使用的Python库。它提供了众多简单而有效的工具,用于数据挖掘和数据分析。然而,sklearn大多数内置的模型仅支持单输入单输出(SISO)的预测。当面对多输入多输......
  • 自定义Obsidian输入栏宽度
    自定义Obsidian输入栏宽度以Obsidian的主题Minimal为案例,进行输入栏宽度的调整;若是没有此主题Minimal,通过设置找到外观后,主题那栏点击管理输入Minimal进行下载(这个主题还是挺不错的);点击左下角设置,选择外观,点击文件夹,找到对应的.css文件文件夹的......
  • AntD单位搜索树两种情况(第一种情况:全局已有数据下过滤、第二种情况:根据输入内容搜索查
    a-tree-select <a-tree-select style="width:260px" v-model:value="formState.userOrgCode" show-search :show-checked-strategy="SHOW_PARENT" :tree-data="TreeData"......
  • 检测 ttk 输入小部件的文本
    我想检测tkinterttk条目小部件的文本我尝试过:importtkinterastkfromtkinterimportttktk=tk.Tk()e1=ttk.Entry(tk)ife1=="good"print("good")几乎做到了!问题是正在将ttk.Entry对象本身与字符串“good”进行比较,而不是比较其内容。要访问......
  • Python捕获一组中的1000个项目进行处理
    我有一个包含数千条记录的大表(可能有3,000到75,000条记录),我将所有数字ID放入排序列表中。我想一次有序地处理一组1000个ID。我如何优雅地获取前1000个和“标签”,设置为“223344到337788”(字典在这里有意义吗,或者只是列表捕获中的第一个/最后一个项目......以跟......
  • 如何使用python输入提示具有相同参数类型但不同返回类型的函数?
    我有一个函数,它的返回类型是tuple[bool,set[int]|str]如果第0项是True,则第1项是结果set[int],否则第1项是一个str,显示失败的原因。是这样的defcallee(para_a:int)->tuple[bool,set[int]|str]:result=set([1,2,3])if......