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

Java读取不定长数组输入及InputMismatchException报错解决

异常引发原因
  • 代码中while(sc.hasNext())没有设置终止边界,会持续扫描输入流的所有内容,不会在读完第一行的整数序列后自动终止。当扫描到第二行的非整数内容Alice时,sc.nextInt()尝试将字符串解析为整数,直接抛出InputMismatchException。
  • 额外注意Scanner的机制特性:nextInt()、next()这类方法只会读取匹配的目标内容,不会消费内容后方的换行、空格分隔符。如果跳过类型判断直接在nextInt()后调用nextLine(),会先读到分隔符组成的空串,无法拿到预期的第二行玩家名。
修正方案

针对你给出的「第一行是任意长度空格分隔整数、第二行是玩家名称字符串」的固定输入格式,最稳妥的实现是按行读取处理:

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        // 读取第一行,拆分后转为整数存入列表
        String firstLine = sc.nextLine();
        for (String numStr : firstLine.trim().split("\\s+")) {
            arr.add(Integer.parseInt(numStr));
        }
        // 读取第二行玩家名
        String player = sc.nextLine();
        // 后续编写业务逻辑即可
    }
}

如果你的输入场景是整数和字符串没有明确的行分隔,也可以在读取数字的循环中增加类型判断,遇到非整数token时自动停止数字读取,处理完残留分隔符后再读取字符串:

import java.util.*;
public class Main
{
    public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        // 仅当下一个输入内容是整数时才进入循环读取
        while(sc.hasNextInt()){
            arr.add(sc.nextInt());
        }
        // 消费整数和字符串之间的残留分隔符
        sc.nextLine();
        String player = sc.nextLine();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:15:44