Java使用Scanner输入学号时空值退出逻辑不生效如何解决
Java Scanner读取学号空输入终止问题修复
问题根因
- 原代码调用
Scanner.nextInt()时,若用户输入空值,该方法会直接抛出InputMismatchException,根本不会执行后续的判空逻辑 - 基本数据类型
int不存在null值,将int转换为Integer后也不可能为null,因此i.equals(null)判断永远为假,对应代码块不会触发 - 无需每次输入都新建
Scanner实例,全局复用同一个即可,重复创建会造成资源浪费,还可能引发输入流异常
修复后代码
public static void inserimento() { Studente s = null; // 全局复用一个Scanner对象 Scanner scanner = new Scanner(System.in); do { System.out.println("\nmatricola:"); // 先读取整行字符串,方便判断空输入 String matInput = scanner.nextLine().trim(); // 空输入直接终止程序 if (matInput.isEmpty()) { break; } // 非空输入转换为int类型学号 int matricola = Integer.parseInt(matInput); System.out.println("\ncognome:"); String cognome = scanner.nextLine().trim(); System.out.println("\nnome:"); String nome = scanner.nextLine().trim(); s = new Studente(matricola, cognome, nome); } while (true); scanner.close(); System.out.println("fine inserimento"); }
可选优化
如果需要处理用户输入非数字的异常场景,可以在Integer.parseInt外层添加try-catch捕获NumberFormatException,抛出输入格式错误提示后重新触发学号输入逻辑即可。
内容的提问来源于stack exchange,提问作者Fabio Palladino
相关产品推荐
相关产品推荐

