数组元素减法索引超出范围

时间:2016-01-26 22:49:07

标签: java arrays indexoutofboundsexception subtraction

我试图从不同的数组中减去相同的元素,即[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列,任何人都可以建议我如何做到这一点?

3 个答案:

答案 0 :(得分:0)

您正在根据correctImg的维度[35] [10]运行r和c,而avgPix的维度为[35] [1]

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

提供的代码片段中的循环使用来自外部/内部for循环的r和c值,根据问题中描述的内容,将avgPix [r] [0]用于所有pixArray [r] [ C]。

不确定你想要达到的目标,但是这样的事情将计算与平均值的差异

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

答案 1 :(得分:0)

我不确定我是否得到你,但是如果你只需要correctImg[r][c] = avgPix[r][c] - pixArray[r][c];执行c=0命令那么你就不需要循环

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

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

答案 2 :(得分:0)

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

事实上,因为该数组的第二维是长度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]);
        }
    }
}