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

使用Scanner的Java代码抛出java.util.NoSuchElementException,求排查原因

Java代码抛出NoSuchElementException的原因及修复

问题重现

编写的Java代码:

import java.util.Scanner;

public class Main {
  public static void main(String[] args) 
  {
    Scanner input = new Scanner (System.in);
    System.out.print("Input the first number: ");
    int num1 = input.nextInt();
    System.out.print("Input the second number: ");
    int num2 = input.nextInt();
    System.out.print("Input the third number: ");
    int num3 = input.nextInt();
    int sum = num1 + num2 + num3;
    System.out.println();
    System.out.println("Sum: "+sum);
  }
}

运行时抛出错误:

Exception in thread "main" java.util.NoSuchElementException

核心原因

这个异常的本质是Scanner调用nextInt()时,找不到可读取的输入数据,具体到你的场景,常见触发原因有两种:

  • 输入未正确提供:在线IDE或VS的运行环境中,你没有在程序需要输入时提供足够的整数(比如只输入1-2个,程序尝试读取第三个时就会报错);部分在线IDE要求提前在输入框填好所有输入内容,否则程序运行时无法获取后续输入。
  • 输入流被提前关闭:如果运行环境的底层逻辑(比如IDE的进程管理代码)提前关闭了System.in标准输入流,Scanner就无法读取到任何数据,直接抛出异常。

修复方案

  1. 确保输入完整:运行程序时,严格按照提示输入3个整数,每个输入后按回车;如果是在线IDE,先在指定输入区域填入3个数值(每行一个或用空格分隔)再启动程序。
  2. 添加输入校验:在读取前先判断是否有可用输入,避免异常,修改后的代码:
import java.util.Scanner;

public class Main {
  public static void main(String[] args) 
  {
    Scanner input = new Scanner(System.in);

    System.out.print("Input the first number: ");
    int num1 = input.hasNextInt() ? input.nextInt() : 0;

    System.out.print("Input the second number: ");
    int num2 = input.hasNextInt() ? input.nextInt() : 0;

    System.out.print("Input the third number: ");
    int num3 = input.hasNextInt() ? input.nextInt() : 0;

    int sum = num1 + num2 + num3;
    System.out.println("\nSum: " + sum);

    input.close();
  }
}
  1. 检查IDE配置:在VS中确认运行配置没有禁用标准输入;在线IDE则查看是否需要开启交互式输入模式,部分平台默认不支持实时输入,需手动设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:55:24