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