Java作业报错java.util.NoSuchElementException: No line found求助
问题:JUnit测试抛出
NoSuchElementException,求无未学语法的解决方法及Stack Overflow提问规范 背景与问题
我是大一第一学期第1周的Java零基础学习者,目前仅掌握变量、输入输出、布尔值、运算符及contains方法,还没学if/else、循环等语法,因此不能使用这些未学内容。
我写的代码在学校提供的VSCode云IDE中可正常运行,但提交给教师的JUnit 4自动批改系统时,出现java.util.NoSuchElementException: No line found错误,测试软件未给出具体报错行号,且我找到的其他解决方案都需要用到未学语法。
现有代码
import java.util.Scanner; public class ContainsAnyCase { public static void main(String[] args) { System.out.println("Type a word:\n"); Scanner userInputWord = new Scanner(System.in); String word = userInputWord.nextLine(); String wordlc = word.toLowerCase(); System.out.println("Type a sentence:\n"); Scanner userInputSentence = new Scanner(System.in); String sentence = userInputSentence.nextLine(); String sentencelc = sentence.toLowerCase(); boolean isContains = sentencelc.contains(wordlc); System.out.println(isContains); } }
错误原因
你创建了两个Scanner对象读取同一个标准输入流System.in。第一个Scanner读取完输入后,输入流的指针已移到末尾,第二个Scanner再调用nextLine()时,找不到可读取的行,因此抛出该异常。JUnit测试环境通常是批量输入或输入流提前关闭,这种多Scanner的写法更容易触发问题。
无未学语法的修复方法
只需要创建一个Scanner实例并复用它读取所有输入,不需要使用任何未学语法:
import java.util.Scanner; public class ContainsAnyCase { public static void main(String[] args) { System.out.println("Type a word:\n"); Scanner scanner = new Scanner(System.in); String word = scanner.nextLine(); String wordlc = word.toLowerCase(); System.out.println("Type a sentence:\n"); String sentence = scanner.nextLine(); String sentencelc = sentence.toLowerCase(); boolean isContains = sentencelc.contains(wordlc); System.out.println(isContains); scanner.close(); // 可选,关闭输入流更规范 } }
Stack Overflow提问规范
- 标题精准:直接点明核心问题和限制条件,比如写成「Java: NoSuchElementException with multiple Scanners in JUnit test (no if/else/loops allowed)」
- 背景明确:清晰说明你的学习阶段、已掌握/未学的语法限制,避免答主给出超出你能力范围的方案
- 报错信息完整:复制完整的异常栈信息(若有),即使无行号也要说明测试环境(JUnit 4)和本地运行正常的情况
- 代码可复现:贴出完整的可运行代码,不要遗漏import、类定义等关键部分
- 需求清晰:明确说明你需要的内容——错误原因、不使用未学语法的修复方法,避免答主跑题
内容的提问来源于stack exchange,提问作者Salome
相关产品推荐
相关产品推荐

