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

Java 数组元素减法索引超出范围,java,arrays,indexoutofboundsexception,subtraction,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 corr

我试图从不同的数组中减去相同的元素,即[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]);
        }
}
}
//pixArray和avgPix已经包含数据
int[]pixArray=新int[35][10];
int[]avgPix=新int[35][1];
int[][]correctiimg=新int[35][10];
公共图像(){
对于(int r=0;r

我还需要更改循环,以便每次pixArray列为0时avgPix仅循环,因为avgPix只有1列。有人能建议我如何执行此操作吗?

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

  int[][] avgPix = new int[35][1];
提供的代码片段中的循环使用外部/内部for循环中的r和c值,根据问题中的描述,对所有pixArray[r][c]使用avgPix[r][0]是有意义的

不确定你们想要达到什么,但像这样的东西会计算出平均值的差异

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

我不确定我是否得到了你,但是如果你需要执行
correctImg[r][c]=avgPix[r][c]-pixArray[r][c]c=0
时才使用code>命令,这样就不需要循环

public void correctImage() {
    for (int r = 0; r < correctImg.length; r++) {
        correctImg[r][0] = avgPix[r][0] - pixArray[r][0];              
    }
}
public void correctImage(){
对于(int r=0;r
编辑
在阅读了您对问题的评论之后,我仍然不确定您想做什么(每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]);
        }
    }
}
int[]pixArray=newint[35][10];
int[]avgPix=新int[35]//不需要2D数组,因为它是行值的平均值
int[][]correctiimg=新int[35][10];
公共图像(){
对于(int r=0;r
为什么
avgPix
只有35x1而不是35x10?如果有,它为什么是2D呢?avgPix在pixArray中存储每行的平均值,我只是把它保存为2D以避免混淆,我不认为这会有什么区别。我仍然需要每10次循环一次avgPix,你说你试图从两个不同的数组中减去相同的元素。但是avgPix有一个col,所以[0]、[0]-[0]、[0]是可以的,但是[0]、[1]-[0]、[1]不是。这是你的问题。也许是个坏例子?