我试图编写一个程序,提示用户输入学生人数,然后提示输入用户名和成绩。它运行一次(意思是我被问到学生的数量,我可以输入名字和数字),然后它给出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
答案 0 :(得分: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
调用立即得到回车,创建一个空的学生名称,你直接跳到下一个{{1}打电话。这一直持续到达到学生的完成量。在nextInt
捕获回车后调用nextLine
,您就可以输入学生姓名。
您可以在打印时明确注意到这一点
nextInt
同时。你总是直接跳到Integer的下一个输入。
Edit2:
如果您想在错误的输入中捕获异常,那么您可以这样做:
Enter student name
Enter grade
答案 1 :(得分:0)
看看这个:
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) {
String num = input.nextLine();
System.out.println("Enter student name");
String studentName = input.next();
System.out.println("Enter grade");
int grade = Integer.parseInt(input.next());
number++;
}
}