2010-10-26 32 views
1
private void equal_AxB() { 
    int x = matrix_A.length; 
    int y = matrix_B[0].length; 
    matrix_C = new double[x][y]; 
    for(int i = 0; i < x; i++) { 
      for(int j = 0; j < y; j++) { 
       for(int k = 0; k < y; k++){ 
       matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j]; 
      } 
     } 
     } 

    return; 
} 

matrix_A:爲什麼我得到一個ArrayIndexOutOfBounds異常?

2 3 
2 3 
2 3 

matrix_B:

2 3 4 
2 4 3 
+0

因爲您試圖訪問超出數組邊界的索引。什麼是「矩陣_A」和「矩陣_B」等於? – 2010-10-26 04:04:14

+0

我知道錯誤是什麼..但我忘了添加什麼兩個數組會是..抱歉編輯,它非常簡單化..它只是一個矩陣乘法類型的東西。 – Samuel 2010-10-26 04:05:08

回答

1

兩個問題,我可以看到:

  • 你需要確保一些A 列等於號 行B。如果這不成立,你不能乘以矩陣。
  • k循環應該有所不同0N其中N是矩陣A的列數,當前正在改變它,直到矩陣B的列數。
+0

好的,在這個聲明中,我們給出了A和B都是兼容的嗎?所以有關問題出在哪裏的想法? – Samuel 2010-10-26 04:11:30

+0

@Samuel:如果考慮到它們是兼容的,問題1是固定的,則需要修復#2。 – codaddict 2010-10-26 04:14:24

+0

好的,我該如何解決這個問題?我已經超級累了,希望今晚能修正這個問題.. – Samuel 2010-10-26 04:15:39

1

您已經從matrix_A提取了第一個索引,第二個從matrix_B [0]中提取;你有沒有保證,剩餘的邊界以任何方式的聯繫,這樣的聲明:

matrix_C[i][j] += matrix_A[i][k]*matrix_B[k][j]; 

它訪問A和B的所有尺寸可以訪問出界任何要麼陣列的尺寸,除了A [1] ,和B [0] [j]。

0

你寫的是

int y = matrix_B [0] .length;

與您試圖檢索matrix_b

的子數組的長度,這將返回3的長度,所以x和y現在有兩個3的值,但你matrix_a是2X3矩陣,這將失敗,當您嘗試在索引2處找到matrix_A。

嘗試使用int y = matrix_B.length;

這將正常工作。

相關問題