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。 修復它,如果你仍然有我的答案下的錯誤評論。