数组元素减法索引越界
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]);
}
}
}
我试图从不同的数组中减去相同的元素,即 [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]);
}
}
}