我是一名新手Java学生,我正在尝试完成一个程序,该程序使用扫描仪输入5个学生的名字,然后循环播放,为每个学生获得3个等级。我陷入困境,因为我一直收到输入不匹配错误,我不知道为什么。我试图正确匹配变量中输入的输入类型。任何帮助将不胜感激!
这就是我所拥有的:
import java.util.Scanner;
public class StudentGrades {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Declare arrays, grades to hold [student #][course] and correspond to the grade. studentNames to be paralell and hold the names.
int [][] grades;
grades = new int[5][3];
String[] studentNames = new String[5];
int studentNumber = 0;
int courseNumber = 0;
// Create loops to put values in both arrays, using student# as a counter
if (studentNumber < 5) {
System.out.println("Enter the student name");
studentNames[studentNumber] = input.next();
// Nested loop to enter the grades
if (courseNumber < 5) {
System.out.println(" Enter a grade for " + studentNames[studentNumber]+" for course #" + courseNumber);
grades[studentNumber][courseNumber] = input.nextInt();
courseNumber = courseNumber + 1;
}
studentNumber = studentNumber + 1;
}
}
}
这就是我得到的:
Exception at thread "main" java.util.InputMismatchException
at java.util.Scanner.throwfor{Scanner.java:909}
at java.util.Scanner.next{Scanner.java:1530}
at java.util.Scanner.nextInt{Scanner.java:2160}
at java.util.Scanner.nextInt{Scanner.java:2119}
at StudentGrades.main{StudentGrades.java:20}
答案 0 :(得分:1)
你的问题在第20行。
grades[studentNumber][courseNumber] = input.nextInt();
这意味着在输入中,它期望一个int,但它发现了另一件事,比如double,char数组或其他任何东西
还有另一个问题,您将成绩声明为:
grades = new int[5][3];
最后一个数字表示您可以从[0..4] [0..2]
访问成绩但你的if语句:
if (courseNumber < 5)
表示您将访问高于&#39; 2&#39;的数字。在
grades[studentNumber][courseNumber] = input.nextInt();
会引发OutOfBoundsException
答案 1 :(得分:0)
来自the docs:
由扫描程序抛出,表示检索到的令牌与预期类型的模式不匹配,或者令牌超出预期类型的范围。
从堆栈跟踪中:
Exception at thread "main" java.util.InputMismatchException
at java.util.Scanner.throwfor{Scanner.java:909}
at java.util.Scanner.next{Scanner.java:1530}
at java.util.Scanner.nextInt{Scanner.java:2160}
at java.util.Scanner.nextInt{Scanner.java:2119}
at StudentGrades.main{StudentGrades.java:20}
您致电nextInt
时会抛出异常。
因此,你得到一个例外,因为你正在请求一个整数,而且Scanner正在寻找一个不是整数的东西。
答案 2 :(得分:0)
是的,就像其他人建议的那样,你的问题在于:
grades[studentNumber][courseNumber] = input.nextInt();
因为您的输入未被识别为整数。
你还应该知道你的代码不会循环五次,它会经历一次并退出,因为if语句不重复。
要循环,你可能应该使用for循环,就像这些:
for(int i = 0; i < 5; i++){
//You code should be the same in here
}
或者将您的if
更改为while
。