2012-09-25 57 views
1
public static int[][] scalarMultiplication(int[][] A,int num) { 
    int[][] arrayScalarMul = new int[A.length][A[0].length]; 

    for (int x=0; x < arrayScalarMul.length; x++) { 
     for (int y=0; y < arrayScalarMul[x].length; y++) { 
      arrayScalarMul[x][y] = A[x * num][y * num]; 
     } 
    } 
    return arrayScalarMul; 
} 

作爲標題說我發現了一個ArrayIndexOutOfBoundsException錯誤,我看到有些人通過使在長度由1較短的修復它,我只是不明白爲什麼那需要?標量乘法 - 數組索引越界異常

+1

肯定'x * num'或'y * num' *不是[always]有效索引* ..讀取異常。喜歡這個例外。它*不*說謊。問題是「太本地化」,但希望答案提供一些關於如何解決這個問題的想法..然後希望這個問題被關閉/刪除。 – 2012-09-25 06:43:06

回答

5
arrayScalarMul[x][y] = A[x * num][y * num]; 

將其更改爲

arrayScalarMul[x][y] = num * A[x][y]; 

你乘以給定的標量指數,但你應該與該索引值乘。

+0

這不是假設初衷是將每個指數值乘以num嗎?我以爲他想訪問A [x * num] [y * num],只要這是一個有效的索引並使用該值? – fayyazkl

+0

'標量乘法「不能這樣工作。根據標題,我會說我的假設是正確的。 – Azodious

+0

錯 - 是的。說得通。沒有專注於此 – fayyazkl

1

的錯誤是由於

arrayScalarMul [X] [Y] = A [X * NUM] [Y * NUM];

num與x(或y)相乘時將其取出邊界。

索引1終止通常用於防止「由1錯誤關閉」,因爲您有一個基於0的數組,因此大小爲n的數組實際上將具有範圍在0和n-1之間的有效索引。所以要麼我們使用< n的循環條件或< = n-1。這不是上述情況。

如果你的內涵是在A [X] [Y]與A [X * NUM] [Y * NUM]替換值,提供這是一個有效的索引,然後添加一個檢查這樣

if(x*num - totalx) && (y*num - totaly) 
    A[x][y] = A[x*num][y*num]; 
0

長度縮短1也不會工作,因爲num在這裏是可變的。

arrayScalarMul[x][y] = A[x * num][y * num]; 

它生產java.lang.ArrayIndexOutOfBoundsException。這裏* x * num *和y num *超出數組索引。