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

Java使用Scanner读取数组时无法读取下一行整数问题求助

问题原因
  • 你手动将Scanner的分隔符设置为仅单个空格" ",覆盖了Scanner默认支持空格、换行符、制表符等空白字符作为分隔符的逻辑。输入第一个数组后按下的回车键对应的换行符无法被识别为分隔符,会残留在输入缓冲区中。此时hasNextInt()碰到换行符会直接返回false,第一个fillArray调用提前结束,第二个fillArray调用时依旧读取到残留的换行符,无法读取第二个数组的任何数值,最终第二个数组输出全为初始值0。
  • fillArray方法中没有限制填充的元素数量,若单个数组输入超过10个元素会触发数组下标越界异常。
  • 现有逻辑没有实现按回车键分割两个数组的规则,即使修改分隔符,也会将所有连续输入的int值都填入第一个数组,不符合需求。
修复方案

你可以选择按行读取的逻辑实现数组分割,更符合你输入规则的要求:

int[] fillArray(Scanner in) {
    int[] k = new int[10];
    int position = 0;
    // 读取一整行作为当前数组的输入,天然实现按回车分割两个数组
    String line = in.nextLine();
    // 分割当前行空格分隔的元素
    String[] nums = line.trim().split(" ");
    for (String num : nums) {
        if (position >= 10) break; // 超过最大长度10直接截断
        if (num.matches("-?\\d+")) { // 校验为合法整数再填充
            k[position] = Integer.parseInt(num);
            position++;
        }
    }
    return k;
}

void start() {
    Scanner in = new Scanner(System.in);
    int[] a = fillArray(in);
    int[] b = fillArray(in);
    printArray(a);
    printArray(b);
}

如果你想保留原有nextInt读取的逻辑,也可以做如下修改:

int[] fillArray(Scanner in) {
    int[] k = new int[10];
    int position = 0;
    // 分隔符改为匹配任意空白字符,兼容空格、换行等
    in.useDelimiter("\\s+");
    // 限制元素不超过10,避免数组越界
    while(in.hasNextInt() && position < 10) {
        k[position] = in.nextInt();
        position++;
    }
    // 读取当前行剩余内容,清除换行符残留避免影响下一个数组读取
    in.nextLine();
    return k;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:04