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

使用Scanner.nextInt()读取多行整数对时最后一次循环需按回车结束

问题根因

  • 你的问题本质是Java Scanner 类的特性和控制台行缓冲机制共同作用的结果:
    1. nextInt() 只会读取输入流中的整数内容,不会处理整数后方的空格、换行符等空白分隔符,且默认会跳过所有前置空白符查找下一个整数。
    2. 操作系统控制台默认采用行缓冲模式:所有输入的内容,只有按下回车键之后,才会被批量写入程序的输入缓冲区供Scanner读取。输入最后一组整数2 4后如果没有手动输入换行,这行数据还停留在控制台缓存中,程序无法读取到第二个整数,就会进入阻塞等待状态。
    3. 如果是直接粘贴整段输入触发该问题,一般是因为粘贴的内容最后一行末尾没有携带换行符,同样会导致最后一组数据无法被程序读取到。

解决方案

方案1:快速修复(保留nextInt()写法)

读取完前两个全局使用的整数后,先调用一次nextLine()清空残留的换行符,同时保证输入/粘贴的内容最后一行末尾带换行符即可:

// 前两个全局值的读取逻辑
int num1 = input.nextInt();
int numEdges = input.nextInt();
input.nextLine(); // 清空第二行末尾残留的换行符

for (int i = 0; i < numEdges; i++) {
    int x = input.nextInt();
    int y = input.nextInt();
    edges.add(new int[]{x, y});
    System.out.println("x-y: " + x + " " + y);
}

方案2:更稳妥的整行读取(彻底避免分隔符残留问题)

直接按行读取输入后拆分整数,不会受换行符残留、行缓冲的影响:

// 前两个全局值的读取逻辑
int num1 = Integer.parseInt(input.nextLine());
int numEdges = Integer.parseInt(input.nextLine());

for (int i = 0; i < numEdges; i++) {
    String[] parts = input.nextLine().split(" ");
    int x = Integer.parseInt(parts[0]);
    int y = Integer.parseInt(parts[1]);
    edges.add(new int[]{x, y});
    System.out.println("x-y: " + x + " " + y);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:09