代码编织梦想

我们使用Scancer.haxNextInt()等具体类型的函数获取输入值的时候,可能遇到类型不匹配的报错,我们一般会catch报错。但是之后,我们仍然无法继续输入,而是一致循环报错

使用try/catch

public static void test1(){  
    Scanner scanner = new Scanner(System.in);  
    int i = 0;  
    while (i<3){  
        try {  
            int a = scanner.nextInt();  
            System.out.println(a);  
        }catch (Exception e) {  
            e.printStackTrace();  
        }finally {  
            i++;  
        }  
    }  
    scanner.close();  
}

会产生如下报错
image.png

或者使用if/else

public static void test2(){  
    Scanner scanner = new Scanner(System.in);  
    int i = 0;  
    while (i<3){  
        if(scanner.hasNextInt()) {  
            int a = scanner.nextInt();  
            System.out.println(a);  
        }else{  
            System.out.println("输入不合法");  
        }  
        i++;  
    }  
    scanner.close();  
}

会产生如下报错

image.png

解决方法

产生报错的原因是,Scancer缓冲区中的值尚未被取走,所以下次循环依然是上一次不正确的值

所以我们可以通过next()或者nextLine()取走

public static void test3(){  
    Scanner scanner = new Scanner(System.in);  
    int i = 0;  
    while (i<3){  
        try {  
            int a = scanner.nextInt();  
            System.out.println(a);  
        }catch (Exception e) {  
            System.out.println(scanner.nextLine()+"不合法");  
            e.printStackTrace();  
        }finally {  
            i++;  
        }  
    }  
    scanner.close();  
}

问题解决,如下图

image.png

或者,我们可以给scancer重新赋值,清空缓冲区

public static void test4(){  
    Scanner scanner = new Scanner(System.in);  
    int i = 0;  
    while (i<3){  
        try {  
            int a = scanner.nextInt();  
            System.out.println(a);  
        }catch (Exception e) {  
            scanner=new Scanner(System.in);  
            e.printStackTrace();  
        }finally {  
            i++;  
        }  
    }  
    scanner.close();  
}

问题解决如下
image.png

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50799082/article/details/129629371

甲基化特异性区域的计算鉴别_wangyunpeng_bio的博客-爱代码爱编程

多形性成胶质细胞瘤(GBM)甲基化区域的计算鉴别   目的:找出胶质细胞瘤特异性甲基化区域,为临床诊断提供理论依据   步骤: 1、  查找数据:下载TCGA中GBM的RNA-seq和甲基化数据 2、  甲基化数据分析,正常肿瘤对比,进行差异甲基化分析,找出肿瘤样本中高甲基化区域 3、  对RNA-seq数据进行分析,正常肿瘤对比,差异表达基

[改进]基于决策表的函数predate_liangaliang96的博客-爱代码爱编程

之前在网上看到的代码套路基本一致,但是仔细分析后仍然存在问题: 它缺少了对所输入月份的天数的检查,就比如输入6月32日后仍然可以得到一个结果,但是很明显是与实际不符的。我在原有基础上进行了改进,现在已经实现了对所输入的年份 月份 日期的范围检查。主要就是对类似的月份进行相同的操作,不同类的月份要划分清晰。 代码如下: package test;import

java重新来过三(操作符,控制流程,基础笔试面试题八道)-爱代码爱编程

一、操作符 1、算数操作符 基本的有:加减乘除余+-*/%          自增,自减    ++   --                         余,取余,取模    % 如果有任何运算单元的长度超过int,那么运算结果就按照最长的长度计算  如果任何运算单元的长度都不超过int,那么运算结果就按照int来计算  byte a = 1

软件测试之功能性测试方法---决策表法-爱代码爱编程

程序说明: 前一日函数 Pre Date 是 NextDate的逆函数,即给定一 个月份、日期、年,会返回前一天的日期。 年的取值在1812年到2017年。 日的取值 在 1日到 31 日之间。 月的取值 在 1到 12

linux上sonarqube和sonar-scanner的安装及使用-爱代码爱编程

Linux安装SonarQube和sonar-scanner详细安装及配置 目录 Linux安装SonarQube和sonar-scanner详细安装及配置 一、sonarqube操作流程规范: 1.1 上传、解压、创建用户、启动 1.2 创建用户(elasticsearch不能以root用户启动),并赋予权限 1.3 切换用户,启动Sonar

vuforia object scanner-爱代码爱编程

Vuforia对象扫描仪是一个用于扫描实体3D对象的Android应用程序。对象扫描程序生成一个对象数据(*. od)文件,其中包含在目标管理器中定义对象目标所需的源数据。扫描仪使您能够生成,测试和编辑OD文件。它提供了对象

java学习笔记day4【流程控制】-爱代码爱编程

一、用户交互Scanner 1.基本语法: Scanner scanner=new Scanner(System.in); 2.作用: 类似python中的input用于获取用户输入 3.获取字符串: 通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取之前一般使用hasNext()和hasNextLine()

PBR 五 几何遮蔽函数-爱代码爱编程

法线分布函数 前言几何遮蔽函数几何函数的定义与要点总结几何函数的定义与主要属性几何函数的两种主要形式:G1和G2几何函数与法线分布函数的联系业界对几何函数模型的选择选择合适的微表面轮廓(microsurface profile)Smith遮蔽函数Smith联合遮蔽-阴影函数分离的遮蔽阴影函数(Separable Masking and Shadow

JavaSE学习笔记3-流程控制学习-爱代码爱编程

流程控制学习 一、Scancer对象 Scancer是用来接收用户输入的。 hasNext()、next() 不能接收带空格的字符串 例如,Hello World 只会输出Hello hasNextLine()、nextLine() 以Enter为结束符 例如,Hello World 会输出Hello World //创建扫描器对

包机制+javados+Scancer对象5-爱代码爱编程

包机制 package pkg1[. pkg2[. pkg3……]]; ​ import package1[ .package2].(classname|*); //.*导入这个包下所有的类 一般利用公司域名倒置作为包名;com.baidu.www package 在import前。 Java Dos javados命令是用来生成自己API文档

java学习笔记(第四天:学生信息管理系统)_白马少年郎的博客-爱代码爱编程

终于开搞第一个小案例了。直接上程序吧。 一、学生类 定义一个学生类,有四个属性,分别是学号、姓名、年龄和家庭住址,属性均用private修饰并设置了set方法和get方法,提供了一个无参构造方法和一个多参数构造方法,这是一个非常标准的类。 package SIMS; /* 快捷键:Alt + insert 自动生成构造方法、set方法和get方法 *

java方法、数组、控制语句综合小案例-爱代码爱编程

1. 要求:模拟实现一个基于文本界面的《家庭记账软件》 主菜单: 活动流程图  详细要求 子功能要求 import java.util.InputMismatchException; import java.util.Scanner; @SuppressWarnings("all") public class Family_2 {

hbase-爱代码爱编程

1、 简介 跳跃表(SkipList)是一种能高效实现插入、删除、查找的内存数据结构,这些操作的期望复杂度都是O(logN)。与红黑树以及其他的二分查找树相比,跳跃表的优势在于实现简单,而且在并发场景下加锁粒度更小,