初学者2D-Array超出界限异常

时间:2014-01-21 19:14:56

标签: java arrays multidimensional-array indexoutofboundsexception jcreator

我在尝试弄清楚如何实现第二个数组来计算我的标记程序的平均值时遇到了一些困难。 我正在使用1个2D数组来存储每个学生在每次作业时收到的分数 (5名学生,4个作业)。 我已经设法让学生平均阵列工作,但是当我去计算每个单独的分配标记(总共5个学生/ 5)。我一直得到一个Indexoutofbounds异常,我对2d arays非常新,我仍在试图弄清楚如何正确阅读它们。 继承我的代码:

import java.util.Scanner;
public class Marks
{
private String[] names;
private int[][] assignments;
private double[] stuAvgArray;
private double[] assignAvgArray;
    public Marks()
    {
        names = new String[5];
        assignments = new int[5][4];
        stuAvgArray = new double[5];
        assignAvgArray = new double[4];
    }

public void getInput()
{
    Scanner input = new Scanner(System.in);
    System.out.println("Enter 5 student names: ");
    for(int i = 0; i < names.length; i++)
        names[i] = input.nextLine();

    for(int row = 0; row < assignments.length; row++)
    {
        System.out.println("Enter the 4 marks for: " + names[row]);
        for(int col = 0; col < assignments[row].length; col++)
        {
            assignments[row][col] = input.nextInt();
            stuAvgArray[row] += assignments[row][col];

        }
        stuAvgArray[row] = (stuAvgArray[row]/4);
    }
    for (int col = 0; col < assignments.length; col++)
    {
        for(int row = 0; row < assignments[col].length; row++)

assignAvgArray [row] + = assignments [row] [col];

        assignAvgArray[col] = (assignAvgArray[col]/5);
    }

}

public String toString()
{
    String output = ("Student \t\t\t Marks \t\t\t\t Average \n" +
                    "Name \t\t\t\t out of 10 \t\t\t out of 10 \n" +
                    "\t\t A1 \t A2 \t A3 \t A4");
            for(int i = 0; i < assignments.length; i++)
            {
                output = output + "\n" + names[i];
                for(int col = 0; col < assignments[i].length; col++)
                {
                    output = output + "\t " + assignments[i][col] + "\t ";
                }
                output = output + "\t\t" + stuAvgArray[i];
                output = output + "\n" + assignAvgArray[i];
            }

    return output;
}

}

我粗体说java错误来自哪里。我试图读入,存储,然后计算数组点[[(0,0),(1,0),(2,0),(3,0),(4,0)],[ (0,1),(1,1),(2,1),(3,1),(4,1)...等]

我想问的是如何创建一个不会给我这个异常的循环,将每列的所有值存储到不同的位置,并将存储在新数组中的每个数字除以5给我平均。

如果还有什么我可以帮助您理解我的问题,请告诉我。

PS:这应该是它的样子;

Student     Marks               Average
Name        out of 10           out of 10
        A1  A2  A3  A4  
Joe Smith   8   9   10  4   7.75
Tommy Jones     9   9   8   5   7.50
Sara Lee    0   10  10  9   7.25
Bob Fowler  10  9   9   0   7.00
Jane Doe    10  10  10  10  10.00
**Average   7.40    9.40    9.40    5.60**

我已计算出行平均值,但粗体列平均值让我感到悲伤

2 个答案:

答案 0 :(得分:2)

以下行错误:

for(int row = 0; row < assignments[col].length; col++)

您正在使用row并增加col。结果,您在该循环的块中执行了一个超出范围的错误。

将其替换为:

for(int row = 0; row < assignments[col].length; row++)

但我担心这不是唯一的问题。根据您阅读输入的方式,assignments是一个2D数组,其中第一维的行号和第二维的列号。但是,您在此处混合维度。提醒一下,您的代码是:

for (int col = 0; col < assignments.length; col++)
{
    for (int row = 0; row < assignments[col].length; row++) {
         assignAvgArray[row] += assignments[row][col];
    }

    assignAvgArray[col] = (assignAvgArray[col]/5);
}

如您所见,您正在使用col来识别rowassignments.length是行数。

for (int col = 0; col < assignments[0].length; col++)
{
    for (int row = 0; row < assignments.length; row++) {
         assignAvgArray[row] += assignments[row][col];
    }

    assignAvgArray[col] = (assignAvgArray[col]/5);
}

答案 1 :(得分:0)

for (int col = 0; col < assignments.length; col++)
    {
        for(int row = 0; row < assignments[col].length; row++)
    assignAvgArray[row] += assignments[row][col];
        assignAvgArray[col] = (assignAvgArray[col]/5);
    }

}

assignments.length是5因此col可以变为4。 assignAvgArray.length是4.当你给aassignAvgArray col = 4时,它会抛出一个arrayoutofboundException。 修复它,如果你的回答中仍然有错误评论。