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

在ZyBooks运行Java代码输出正常但触发NoSuchElementException异常求助

java.util.NoSuchElementException异常排查与修复

问题原因

你的代码触发java.util.NoSuchElementException的核心原因是未检查输入流是否还有可用数据,就直接调用Scanner的next()或nextInt()方法:

  • 当输入流耗尽(比如用户输入完最后一组数据后结束输入,或输入"Stop"后没有对应整数输入),Scanner尝试读取不存在的元素时就会抛出该异常。
  • 当前逻辑中,即便读取到inputString为"Stop",循环终止前的最后一次迭代里,程序依然会执行inputInt = scnr.nextInt(),若此时无整数输入,就会触发异常。

修复方案

在每次调用next()和nextInt()前,分别用hasNext()和hasNextInt()检查输入是否存在;同时调整循环逻辑,确保读取到"Stop"时不再尝试读取整数。

修复后的完整代码

import java.util.Scanner;

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

      String inputString = "";
      int inputInt = 0; 
      
      // 外层判断输入流是否还有数据
      while (scnr.hasNext()) {
         inputString = scnr.next();
         // 读到Stop直接终止循环,不再读取后续整数
         if (inputString.equals("Stop")) {
             break;
         }
         // 检查是否有可用整数输入
         if (scnr.hasNextInt()) {
             inputInt = scnr.nextInt();
             if (inputInt <= 35) {
                System.out.println(inputString + ": reorder soon");
             }
         } else {
             // 处理无效整数输入,避免死循环
             System.out.println("无效的整数输入");
             scnr.next();
         }
      }
      scnr.close();
   }
}

关键修改点

  • 用scnr.hasNext()作为循环外层判断,确保仅当输入流有数据时才继续执行。
  • 读取inputString后立即判断是否为"Stop",是则直接跳出循环,避免后续无效的整数读取操作。
  • 读取整数前用scnr.hasNextInt()检查,防止输入非整数或无输入时触发异常。
  • 添加无效输入处理逻辑,避免程序陷入死循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:57:45