数组元素减法索引越界

Array element subtraction index out of bounds

我试图从不同的数组中减去相同的元素,即 [0,0] - [0,0] 和 [0,1] - [0,1] 但我只是得到一个数组索引越界异常,我似乎无法弄清楚为什么。谁能看出代码有问题?

//pixArray and avgPix already contain data
int[][] pixArray = new int[35][10];
int[][] avgPix = new int[35][1];
int[][] correctImg = new int[35][10];

public void correctImage() {
for (int r = 0; r < correctImg.length; r++) {
        for (int c = 0; c < correctImg[r].length; c++) {
            correctImg[r][c] = avgPix[r][c] - pixArray[r][c];
            System.out.println(correctImg[r][c]);
        }
}
}

我还需要更改循环,以便 avgPix 仅在每次 pixArray 列为 0 时循环,因为 avgPix 只有 1 列,谁能建议我该怎么做?

根据 correctImg 的维度 [35][10],你是 运行 r 和 c,而 avgPix 的维度是 [35][1]

  int[][] avgPix = new int[35][1];

提供的代码片段中的循环使用 outer/inner for 循环中的 r 和 c 值,根据问题中的描述,对所有 pixArray 使用 avgPix[r][0] 是有意义的[r][c]。

不确定您要达到的目标,但像这样的东西会计算出与平均值的差异

   correctImg[r][c] = avgPix[r][0] - pixArray[r][c]     

我不确定我是否明白你的意思,但是如果你只需要在 c=0 时执行 correctImg[r][c] = avgPix[r][c] - pixArray[r][c]; 命令,那么你不需要循环

public void correctImage() {
    for (int r = 0; r < correctImg.length; r++) {
        correctImg[r][0] = avgPix[r][0] - pixArray[r][0];              
    }
}

编辑
在阅读了您对问题的评论后,我仍然不确定您要做什么(每 10 次循环 avgPix?)。 也许 IF 语句更合适

avgPix的第二个(无用的)维度是长度1,但是你迭代的其他数组的长度是10。这意味着当c > 0时,那些数据点不存在在 avgPix

事实上,因为那个数组的第二个维度是长度1,所以它几乎没用。相反,您根本不应该担心第二个维度。为了让它显而易见:

int[][] pixArray = new int[35][10];
int[][] avgPix = new int[35]; //no need for 2D array, since it is an average of row values
int[][] correctImg = new int[35][10];

public void correctImage() {
    for (int r = 0; r < correctImg.length; r++) {
        int rowAverage = avgPix[r]; //this doesn't depend on c

        for (int c = 0; c < correctImg[r].length; c++) {
            correctImg[r][c] = rowAverage- pixArray[r][c]; 
            System.out.println(correctImg[r][c]);
        }
    }
}