【问题标题】:Beginner 2D-Array out of bounds exception初学者二维数组越界异常
【发布时间】:2014-02-11 13:49:32
【问题描述】:

我在试图弄清楚如何实现第二个数组来计算我的标记程序的平均值时遇到了一些困难。 我正在使用 1 个二维数组来存储每个学生在每个作业中获得的分数 (5 名学生,4 份作业)。 我已经设法让学生平均数组正常工作,但是当我去计算每个单独的作业标记时(总共 5 个学生 /5 )。我不断收到 Indexoutofbounds 异常,我对二维数组非常陌生,并且仍在尝试弄清楚如何正确读取它们。 这是我的代码:

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)..etc]]

我想问的是如何创建一个不给我这个异常的循环,将每列的所有值存储到单独的位置,并将存储在新数组中的每个数字除以 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**

我计算了行平均值,但粗体列的平均值让我很伤心

【问题讨论】:

    标签: java arrays multidimensional-array indexoutofboundsexception jcreator


    【解决方案1】:

    下面这行是错误的:

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

    您正在使用 row 并改为增加 col。结果,您在该循环的块中出现了越界错误。

    替换为:

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

    但恐怕这不是唯一的问题。根据您读取输入的方式,assignments 是一个二维数组,其中第一个维度的行号和第二个维度的列号。但是,您在这里混合了维度。提醒一下,您的代码是:

    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);
    }
    

    【讨论】:

    • 您好 maxime,感谢您发现该错误,但我仍然收到绑定错误,我认为这与数组长度的差异有关。虽然不确定
    【解决方案2】:
    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。 修复它,如果您在我的回答下仍然有错误评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-02
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      相关资源
      最近更新 更多