使用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就无法读取到任何数据,直接抛出异常。
修复方案
- 确保输入完整:运行程序时,严格按照提示输入3个整数,每个输入后按回车;如果是在线IDE,先在指定输入区域填入3个数值(每行一个或用空格分隔)再启动程序。
- 添加输入校验:在读取前先判断是否有可用输入,避免异常,修改后的代码:
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(); } }
- 检查IDE配置:在VS中确认运行配置没有禁用标准输入;在线IDE则查看是否需要开启交互式输入模式,部分平台默认不支持实时输入,需手动设置。
内容的提问来源于stack exchange,提问作者refik
相关产品推荐
相关产品推荐

