Java 二维数组中的越界异常

Java 二维数组中的越界异常,java,arrays,double,dimensional,Java,Arrays,Double,Dimensional,在二维数组中求所有偶数之和和和所有奇数之积 为什么会出现以下越界异常错误 Exception java. lang. Array Index Out Of Bounds Exception 运行代码时,该异常出现在ifm[i][j]%2==0行 索引1处的m数组元素缺少第四个元素: {30,11,71} 将i

在二维数组中求所有偶数之和和和所有奇数之积

为什么会出现以下越界异常错误

Exception java. lang. Array Index Out Of Bounds Exception
运行代码时,该异常出现在ifm[i][j]%2==0行

索引1处的m数组元素缺少第四个元素:

{30,11,71}

将i<4替换为i错误的确切原因是2D数组实际上是一个锯齿状数组,这意味着并非每一行都包含相同数量的元素。事实上,第二行仅包含三个元素,因此当您选中以下if时:

对于i=1和j=3,您会得到一个越界异常

您应该使2D数组不锯齿,或者改为使用此for循环:

不要将固定值(如4)用作限制,而是使用数组提供的长度

for (int i = 0; i < m.length; i++) {
    for (int j = 0; j < m[i].length; j++) {
      //...
    }
}

可能重复欢迎使用堆栈溢出!请带上,四处看看,并通读,特别是邮政编码和标记等文字,而不是作为图片的文字。原因:因为当i=1和j=4时,数组中不存在索引。出于某种原因,我得到变量r的结果为零,有什么解决方案吗?@JohnDoe,这是另一个问题。原因是您正在初始化r=0,因此无论您将其乘以什么值,结果始终为0。i、 e.:0*23=0,对吗?程序现在正在成功运行,感谢您的及时帮助出于某种原因,我得到了变量r的结果0,有什么解决方案吗?@JohnDoe r必须初始化为1,因为multiplication@ElmaCherb不是1,因为如果没有奇数,它将错误地返回1而不是0。我认为,这里的方法是在else条件中添加一个检查。在我的回答中,我做了一个更新来解释这一点。@JohnDoe很高兴你现在就可以工作了!考虑一下答案,因为未来读者知道问题已经解决了。
for (int i=0; i < 4; ++i) {
    for (int j=0; j < m[i].length; ++j) {
            if (m[i][j]%2 == 0) {
                s += m[i][j];
            }
            else {
                r *= m[i][j];
            }
        }
    }
}
for (int i = 0; i < m.length; i++) {
    for (int j = 0; j < m[i].length; j++) {
      //...
    }
}
else {
    r = r == 0 ? m[i][j] : r * m[i][j];
}