我正在尝试编写一个程序,提示用户输入学生人数,然后提示输入用户名和成绩。它运行一次(这意味着我被问到学生人数,我可以输入名字和号码),然后它给出一个 InputMismatchException
。
你能看出哪里出了问题吗?
public class LowestScore {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.print ("Enter the number of students");
int numberOfStudents = input.nextInt();
int number = 0;
while (number <= numberOfStudents) {
number++;
System.out.println ("Enter student name");
String studentName = input.nextLine();
System.out.println ("Enter grade");
int grade = input.nextInt();
}
错误
run: Enter the number of students12 Enter student name Enter grade josje 8
Exception in thread "main" java.util.InputMismatchException at
java.util.Scanner.throwFor(Scanner.java:864) at
java.util.Scanner.next(Scanner.java:1485) at
java.util.Scanner.nextInt(Scanner.java:2117) at
java.util.Scanner.nextInt(Scanner.java:2076) at
demo.LowestScore.main(LowestScore.java:31) Java Result: 1
最佳答案
您需要在每次 nextInt
调用后捕获回车符。
Scanner input = new Scanner(System.in);
System.out.print ("Enter the number of students");
int numberOfStudents = input.nextInt();
input.nextLine(); // catch it
int number = 0;
while (number <= numberOfStudents) {
number++;
System.out.println ("Enter student name");
String studentName = input.nextLine();
System.out.println ("Enter grade");
int grade = input.nextInt();
input.nextLine(); // catch it
}
请注意,如果您输入无效的整数,您仍然可能会遇到异常。
编辑:
基本上,nextInt
捕获您输入的数字,但它不会捕获回车符(您通过按 Enter 键创建的新行)。所以它的作用是,您输入一个学生数量的数字,比方说 1。 nextLine
调用立即获取回车符,创建一个空的学生姓名,然后直接跳到下一个 nextInt
调用。这种情况一直持续到学生人数达到上限为止。在 nextInt
捕获回车符后调用 nextLine
,即可输入学生姓名。
您可以在打印时特别注意到这一点
Enter student name
Enter grade
同时。您总是直接跳转到整数的下一个输入。
编辑2:
如果您还想捕获错误输入的异常,那么您可以这样做:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numberOfStudents = -1;
boolean exception = true;
do {
try {
System.out.print("Enter the number of students");
numberOfStudents = input.nextInt();
exception = false;
} catch (InputMismatchException e) {}
input.nextLine();
} while (exception);
int number = 0;
while (number <= numberOfStudents) {
exception = true;
number++;
System.out.println("Enter student name");
String studentName = input.nextLine();
int grade;
do {
try {
System.out.println("Enter grade");
grade = input.nextInt();
exception = false;
} catch (InputMismatchException e) {}
input.nextLine();
} while (exception);
// input.nextLine();
}
}
关于java - 输入不匹配异常错误 学生成绩和姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990041/