使用扫描程序的Java输入不匹配错误

我是一名新手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} 

你的问题在第20行。

 grades[studentNumber][courseNumber] = input.nextInt(); 

这意味着在输入中,它期望一个int,但它创建了另一个东西,如double,char数组或其他任何东西

还有另一个问题,您将成绩声明为:

 grades = new int[5][3]; 

最后一个数字表示您可以从[0..4] [0..2]访问成绩

但是你的if语句:

 if (courseNumber < 5) 

表示您将访问高于'2'的数字

 grades[studentNumber][courseNumber] = input.nextInt(); 

这将引发OutOfBoundsException

来自文档 :

由扫描程序抛出,表示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

从您的堆栈跟踪:

 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会抛出exception。

因此,您得到一个exception,因为您正在请求一个整数,而Scanner正在查找不是整数的东西。

是的,和其他人一样建议,你的问题在于:

 grades[studentNumber][courseNumber] = input.nextInt(); 

因为您的输入不被识别为整数。

您还应该知道您的代码将不会循环五次,它将经历一次并退出,因为if语句不重复。

循环你应该使用for循环,这些东西:

 for(int i = 0; i < 5; i++){ //You code should be the same in here } 

或者将你的if改为。