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

Java方法内操作ArrayList时出现NoSuchElementException报错原因求解

错误原因说明

这个错误和你将逻辑写在类方法中没有任何关系,核心问题出在Scanner的资源关闭逻辑上:

  • 当你调用Scanner.close()方法时,如果当前Scanner绑定的是标准输入流System.in,该方法会同时将System.in也关闭,且System.in一旦关闭后无法重新打开。你在setMaxPlayers()方法中读取完最大玩家数后直接执行了sc.close(),此时System.in已经被彻底关闭。
  • 后续执行setPlayers()方法时,你新创建的Scanner尝试绑定已经关闭的System.in读取输入,调用sc.next()时无法获取到任何输入内容,就会抛出NoSuchElementException异常。

你把for循环放到单独测试类的main方法中可以正常运行,是因为这种场景下你没有提前关闭System.in,全程只有一个Scanner实例工作,不会触发流被提前关闭的问题。

修复方案

你可以选择两种方式修复问题:

  • 全局共用同一个Scanner实例:不要在每个方法里单独创建Scanner,你可以把Scanner设置为Player类的成员变量,或者在Main方法中创建后传入两个调用方法中,等程序所有输入操作全部完成后再关闭Scanner。
  • 不对绑定System.in的Scanner执行关闭操作:小型项目中你可以直接去掉sc.close()这行代码,程序运行结束后JVM会自动回收相关资源,不会造成异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:48:03