1

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

3 回答 3

1

你的问题在第 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

于 2013-10-15T15:28:28.473 回答
0

文档

由 Scanner 抛出以指示检索到的令牌与预期类型的​​模式不匹配,或者令牌超出预期类型的​​范围。

从您的堆栈跟踪:

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.

因此,您会遇到异常,因为您正在请求一个整数并且扫描器正在寻找不是整数的东西。

于 2013-10-15T15:29:23.550 回答
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.

于 2013-10-15T15:32:44.380 回答