0

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

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 [行] + =分配[行] [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** 

我已经计算出该行平均水平,但中粗体的列平均是给我的悲伤

回答

2

下面一行是错误的:

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

嗨那里马克西姆,谢谢你捕捉错误,但我仍然得到了约束错误,我认为它与我的数组长度的差异。不知道虽然 – OGLOKE

+0

的确,我在编辑我的答案。 –

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所以山坳可以成为4 assignAvgArray.length为4。当你给aassignAvgArray山坳= 4会抛出arrayoutofboundException。 修复它,如果你仍然有我的答案下的错误评论。