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

Java使用Scanner读取输入报NoSuchElementException部分在线IDE运行异常

Java调用Scanner.nextInt()部分在线IDE报NoSuchElementException问题排查与解决

异常根因

NoSuchElementException在你的代码场景中抛出,本质是调用sc.nextInt()时,Scanner绑定的System.in输入流已经处于结束(EOF)状态,没有可用的输入内容可供读取。

  • 本地VS Code运行正常:本地运行环境支持交互式输入,执行到nextInt()时会阻塞等待用户手动输入内容,输入流不会提前结束。
  • 部分在线IDE报错:这类在线IDE默认不支持运行时交互式输入,如果用户没有预先在IDE专门的「STDIN输入区」/「自定义输入区」填写好所有需要的输入内容,程序启动后System.in会直接被标记为结束状态,调用nextInt()无内容可读就会抛出异常。
  • 部分在线IDE运行成功:这类IDE默认支持运行时交互式输入,或者你测试时已经提前在输入区填写了测试用的两个整数,输入流有内容可读取。

解决方案

方案1:代码层面增加输入校验,避免异常

调用nextInt()前先通过hasNextInt()判断是否有可用的整数输入,不存在时直接给出提示而非抛出异常:

import java.util.Scanner;
public class Main {
    public static void main(String [] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter any two numbers: ");
        int a,b,c;
        if (sc.hasNextInt()) {
            a = sc.nextInt();
        } else {
            System.out.println("未获取到第一个有效整数输入");
            return;
        }
        if (sc.hasNextInt()) {
            b = sc.nextInt();
        } else {
            System.out.println("未获取到第二个有效整数输入");
            return;
        }
        c = a + b;
        System.out.println("The sum = " + c);
    }
}

方案2:在线IDE使用前适配输入规则

面试使用在线IDE前,先确认IDE的输入规则:

  • 如果有单独的输入填写区域,提前将需要输入的测试数据填写到对应区域再运行代码
  • 如果支持运行时交互式输入,代码运行后按照控制台提示依次输入内容即可

补充说明

你查询到的「不要调用Scanner的close()方法」是另一类同异常的触发场景:同一个JVM进程内如果创建过多个读取System.in的Scanner,前面的Scanner调用close()会顺带关闭System.in,导致后续的Scanner读取时抛出该异常,和你当前的场景并不重合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:45:08