`输入 Activity 编号:线程异常 "main" java.util.NoSuchElementException

`Enter Activity Number: Exception in thread "main" java.util.NoSuchElementException

这里是新手,程序可以运行,我可以调用 class 但我不知道这是什么。我尝试搜索,但我遇到的不是同一个问题

import java.util.*;

public class mid_term {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean ok = true;
        Act1 act_1 = new Act1();

        do {
            System.out.println("Midterm Project...Press [0] to exit.\n\n\n");
            System.out.println("[1] Activity 1 (Grade Calculator).");


            System.out.print("Enter Activity Number: ");
            int choice = input.nextInt();

            switch (choice) {
            case 1:
                act_1.main(args);
                break;
            default:
                break;
            }

        } while (ok);
    }

}
import java.util.*;

public class Act1 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.print("Enter Prelim Grade: ");
        double prelim = input.nextDouble();

        System.out.print("Enter Midterm Grade: ");
        double midterm = input.nextDouble();

        System.out.print("Enter Final Grade: ");
        double finals = input.nextDouble();

        
        double result = ((prelim*.30) +(midterm*.30)+ (finals*.40));
        System.out.println("Final Ratings: " + result);

        input.close();

    }
}

Enter Activity Number: Exception in thread "main" java.util.NoSuchElementException

我该如何解决这个问题?


Enter Activity Number: Exception in thread "main" java.util.NoSuchElementException
        at java.base/java.util.Scanner.throwFor(Scanner.java:937)
        at java.base/java.util.Scanner.next(Scanner.java:1594)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
        at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
        at mid_term.main(mid_term.java:23)

我注意到你的代码有几个问题,首先你不应该在你的 Act1 class 中创建另一个“main”方法。 main 方法是当您 运行 您的代码时调用的第一个方法,通常您只想创建其中一个。也没有理由将其设为静态,因为您创建了一个 Act1 对象。当您不需要对象来调用它们时,使用静态方法。

它给你一个错误的原因是因为你让两个不同的扫描仪同时扫描 System.in,我想。要解决此问题,只需将您的扫描仪从“mid_term”class 传递到 Act1 中的方法(您希望此时已重命名)。还要确保不要在最后关闭它,否则一旦 mid_term 中的 while 循环重复它自己就会崩溃。

您可能还想考虑在 java 中重命名“mid_term”,通常的做法是将 class 的第一个字母大写并使用驼峰式大小写而不是下划线

在 class Act1 中调用

 input.close();

它会在第一次迭代结束时关闭您的 System.in 流。

在 class mid_term 中你有一个 无限循环 ,如果你希望你的程序运行 没有 NoSuchElementException,你应该保持你的流打开。删除

input.close();