有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

程序运行后的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) 个答案

  1. # 1 楼答案

    很可能,在prime tester应用程序打开自己的程序时,您的程序有一个Scanner打开。您的两个扫描仪都在读取System.in。现在,在程序关闭后,关闭主测试仪Scanner。你的错误来了:

    关闭该Scanner,还可以关闭底层System.in。这就是为什么您的第一个Scanner现在将失败:它的输入流刚刚关闭

    解决方案应该是尝试(重新)只使用一个Scanner