Java报错Exception in thread 'main' java.util.NoSuchElementException求助
解决
java.util.NoSuchElementException错误及代码修复 问题根源
你的代码抛出NoSuchElementException的核心原因是:当读取到终止符"End"时,程序仍然尝试调用scnr.nextInt()读取整数,但"End"之后没有对应的整数输入,导致Scanner找不到下一个元素而报错。此外还有两处逻辑漏洞:
- 用
input.contains(find)判断终止符不准确,若输入字符串包含"End"(比如"EndShelf")会被误判为终止 - 循环前的初始化读取没有先检查是否为"End",若输入一开始就是"End"会直接报错
修复后的代码
import java.util.Scanner; public class Inputkey { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); String input; // 先读取第一个字符串 input = scnr.next(); // 循环条件:当输入不是"End"时继续执行 while (!"End".equals(input)) { // 确认不是终止符后,再读取对应的整数 int num = scnr.nextInt(); if (num < 25) { System.out.println(input + ": low on stock"); } else { System.out.println(input + ": well stocked"); } // 读取下一个字符串,准备下一次循环判断 input = scnr.next(); } scnr.close(); // 养成关闭资源的好习惯 } }
关键修改说明
- 调整读取顺序:先读取字符串并判断是否为"End",只有不是终止符时才读取对应整数,避免读到"End"时无整数可读的情况
- 精准判断终止符:用
"End".equals(input)替代contains,确保只有完全匹配"End"时才终止循环 - 优化初始化逻辑:循环前只读取字符串,避免初始阶段就因错误读取整数报错
- 添加资源关闭:调用
scnr.close()关闭Scanner,符合Java资源管理规范
测试验证
用示例输入Bookcase 30 Hammock 2 Bed 5 End测试,输出与题目要求完全一致:
Bookcase: well stocked Hammock: low on stock Bed: low on stock
内容的提问来源于stack exchange,提问作者Romy Cat
相关产品推荐
相关产品推荐

