ArrayIndexOutOfBounds具有二维数组的异常

时间:2014-02-11 02:33:57

标签: java

这里我们去...当我尝试一个有3个学生和3个班级的例子时,输入工作正常,直到最后一个类,它抛出异常。这没有意义,因为长度应该适合for循环......任何人都可以在这里找到错误吗?

import java.io.*;

public class Application
{
public static void main()
{
    int studentNum = 0;
    int courseNum = 0;

    System.out.println("\f------GRADE CALCULATOR------\n");
    try
    {
        BufferedReader buffin = new BufferedReader(new InputStreamReader (System.in));
        System.out.print("Enter number of students: ");
        System.out.flush();
        studentNum = Integer.parseInt(buffin.readLine());
        System.out.print("Enter number of courses to compute grades for: ");
        System.out.flush();
        courseNum = Integer.parseInt(buffin.readLine());

        int grades[][] = {new int[studentNum], new int[courseNum]};
        System.out.println("\nEntering grades for " + studentNum + " students for " + courseNum + " classes.\n");
        System.out.println(grades.length);
        for (int i = 0; i < studentNum; i++)
        {
            System.out.println("Entering grades for student #" + (i+1) + "...");
            for (int k = 0; k < courseNum; k++)
            {
                System.out.print("Enter grade recieved in course #" + (k+1) + ": ");
                System.out.flush();
                char letterGrade = (buffin.readLine()).charAt(0);
                if (letterGrade == 'A' || letterGrade == 'a')
                    grades[i][k] = 4;
                else if (letterGrade == 'B' || letterGrade == 'b')
                    grades[i][k] = 3;
                else if (letterGrade == 'C' || letterGrade == 'c')
                    grades[i][k] = 2;
                else if (letterGrade == 'D' || letterGrade == 'd')
                    grades[i][k] = 1;
                else if (letterGrade == 'F' || letterGrade == 'f')
                    grades[i][k] = 0;
                else
                {
                    System.out.println("\nInvalid entry!  Acceptable inputs are A, B, C, D, or F.\n");
                    k--;
                }
            }
        }
    }
    catch (IOException e)
    {
    }
}
}

3 个答案:

答案 0 :(得分:2)

这行代码就是问题:

int grades[][] = {new int[studentNum], new int[courseNum]};

您正在初始化一个包含两个元素的数组:studentNum元素数组和courseNum元素数组。

你应该做的是:

int grades[][] = new int[studentNum][courseNum];

答案 1 :(得分:1)

问题在于您将等级创建为长度为2的数组,其元素是数组。你可能打算像这样创建一个多维数组。

int[][] grades = new int[studentNum][courseNum];

这将创建一个studentNum元素数组,每个元素都初始化为一个courseNum int数组。

答案 2 :(得分:0)

int grades[][] = {new int[studentNum], new int[courseNum]};

您在这里创建的是一个长度为2的数组。

  • 在索引0处,您有new int[studentNum]
  • 在索引1处您有new int[courseNum]

所以你有两个不同长度的数组的数组。