我想編寫一個函數,將2D數組的大小調整爲給定的參數。其通用調整大小陣列:Java調整數組大小
public static int[][] resize(int[][] source, int newWidth, int newHeight) {
int[][] newImage=new int[newWidth][newHeight];
double scale=newWidth/source.length;
for (int j=0;j<newHeight;j++)
for (int i=0;i<newWidth;i++)
newImage[i][j]=source[(int)(i/scale)][(int)(j/scale)];
return newImage;
上面的代碼沒有問題,它適用於整數大小調整。然而,問題出現時,我使用resize函數調整數組的大小爲0.5。
int[][] newImage=new int[source.length][source.length];
newImage=resize(source,source.length/2,source[0].length/2);
return newImage;
然後一切都變得瘋狂。我得到了類似2147483647的outofboundserrorexception。問題在於第一個函數中的double scale
變量以及我在最後一行的第一個函數中使用的類型轉換。任何想法修復?
注意:source.length是數組的寬度(列),source [0] .length是高度(行)。
2147483647恰好是2^31-1(java中signed int的最大值)。巧合?我想不是。快樂的編碼。 – 2010-10-09 23:22:52
[Java Array Manipulation]的可能重複(http://stackoverflow.com/questions/3886818/java-array-manipulation) – 2010-10-09 23:33:04
SO缺少的是一組通用答案,向學生程序員解釋如何調試程序。 – 2010-10-10 02:25:22