Java程序抛出InputMismatchException异常问题求助
问题分析与解决
异常原因
java.util.InputMismatchException 是因为你输入的内容不是整数类型——比如输入了字母、小数、符号,或者在程序等待输入时直接终止(比如Ctrl+C),导致Scanner.nextInt()无法读取到合法的整数,从而抛出异常。而程序一直等待是因为nextInt()方法会阻塞,直到读取到有效的整数输入。
解决方法
规范输入格式
运行程序后,先输入数组的长度(整数),然后输入对应数量的整数,每个数之间用空格或回车分隔都可以。示例输入:3 10 20 5添加输入校验(推荐)
在读取输入前,先用Scanner.hasNextInt()判断下一个输入是否为整数,避免非法输入导致程序崩溃。修改后的代码如下:import java.util.Scanner; public class Array { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int size = 0; // 校验数组长度输入 while (!sc.hasNextInt()) { System.out.println("请输入合法的整数作为数组长度!"); sc.next(); // 跳过非法输入 } size = sc.nextInt(); int arr[] = new int[size]; // 校验数组元素输入 for (int i = 0; i < size; ) { if (sc.hasNextInt()) { arr[i] = sc.nextInt(); i++; } else { System.out.println("请输入合法的整数作为数组元素!"); sc.next(); // 跳过非法输入 } } // 合并最值查找循环,减少遍历次数 int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for (int num : arr) { if (num > max) { max = num; } if (num < min) { min = num; } } System.out.println("Maximum value of array is : " + max); System.out.println("Minimum value of array is : " + min); sc.close(); // 关闭Scanner } }额外优化
原代码中两次遍历数组找最值,可合并成一次遍历,提升执行效率,上述修改已包含该优化。
内容的提问来源于stack exchange,提问作者Archit Jain
相关产品推荐
相关产品推荐

