`输入 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();
这里是新手,程序可以运行,我可以调用 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();