程序运行后的inputstream“java.util.NoSuchElementException未找到行”
我正在制作一个基于控制台的“操作系统”,可以运行一些程序。但是,在程序运行后,扫描程序失败,无法再接受新命令-程序崩溃。下面是一个错误代码的示例
主类中1个程序的命令输入
while (!userInput.equals("kill")) {
System.out.print("DukeOS/menus/programs>");
userInput = input.nextLine();
switch (userInput) {
case "PrimeTester":
while (!userInput.equals("cncl")
&& !userInput.equals("kill")) {
System.out.print("DukeOS/menus/programs/PrimeTester>");
userInput = input.nextLine();
switch (userInput) {
case "load":
PrimeTester primeTester = new PrimeTester();
System.out.println("PrimeTester successfully initialised.");
Scanner checkInput = new Scanner(System.in);
System.out.println("Enter an integer that you want to test for primality:");
long testInput = checkInput.nextLong();
primeTester.primeTest(testInput);
checkInput.close();
break;
程序在一个单独的类中执行
class PrimeTester {
void primeTest(long testInput) {
long tester = (long) Math.sqrt(testInput);
System.out.println("Testing...");
while (true) {
tester -= 2;
if (tester < 2) {
System.out.println("The number " + testInput + " is prime!");
break;
}
if ((testInput % tester) == 0) {
System.out
.println("The number " + testInput + " is composite!");
System.out.println("It is divisible by " + testInput / tester
+ ".");
break;
}
}
}
}
任何帮助都将不胜感激。简单的解释就好了,我有点像JavaNoob:)谢谢
# 1 楼答案
很可能,在prime tester应用程序打开自己的程序时,您的程序有一个
Scanner
打开。您的两个扫描仪都在读取System.in
。现在,在程序关闭后,关闭主测试仪Scanner
。你的错误来了:关闭该
Scanner
,还可以关闭底层System.in
。这就是为什么您的第一个Scanner
现在将失败:它的输入流刚刚关闭解决方案应该是尝试(重新)只使用一个
Scanner