You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java程序抛出InputMismatchException异常问题求助

问题分析与解决

异常原因

java.util.InputMismatchException 是因为你输入的内容不是整数类型——比如输入了字母、小数、符号,或者在程序等待输入时直接终止(比如Ctrl+C),导致Scanner.nextInt()无法读取到合法的整数,从而抛出异常。而程序一直等待是因为nextInt()方法会阻塞,直到读取到有效的整数输入。

解决方法

  1. 规范输入格式
    运行程序后,先输入数组的长度(整数),然后输入对应数量的整数,每个数之间用空格或回车分隔都可以。示例输入:

    3
    10 20 5
    
  2. 添加输入校验(推荐)
    在读取输入前,先用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
        }
    }
    
  3. 额外优化
    原代码中两次遍历数组找最值,可合并成一次遍历,提升执行效率,上述修改已包含该优化。

内容的提问来源于stack exchange,提问作者Archit Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 17:05:21