我正在尝试将x * y int数组的所有值存储到x长度数组中,但无论我如何操作,我最终都会遇到各种运行时错误。这是我目前的代码:
for(int x=0; x < size.length; x++){
for(int y=0; y < orders; y++){
totalGears[x] += gears[x][y];
}
}
程序的目的是计算订购的不同尺寸齿轮的数量,其中x指定顺序,y指定唯一齿轮的数量,例如在数组齿轮中[] []如果10个订单则x将为10输入,如果有3种尺寸的齿轮,则y为3。因此,如果订单0适用于3个大齿轮,4个中齿轮和6个小齿轮,则齿轮[0] [3]的内容为6。
除非我运行程序时,一切都很好,直到我点击此部分运行并获得以下内容:
大 - [我@ 33909752 java.lang.ArrayIndexOutOfBoundsException
我已经尝试重新安排我能想到的一切。这种类型的嵌套for循环在整个程序中多次运行,所以我无法弄清楚它为什么会抛出错误。所有数组都是Int数组。
编辑:已解决 - 更改 totalGears [x] + = gears [x] [y] 至 totalGears [x] = totalGears [x] + gears [x] [y]
解决了这个问题,但我不知道为什么
答案 0 :(得分:0)
确保您不超过gears
以及gears[x]
的范围:
int[]totalGears = new int[size.length];
for(int x=0; x < Math.min(size.length,gears.length); x++){
for(int y=0; y < Math.min(gears[x].length,shipments); y++){
totalGears[x] += gears[x][y];
}
}
答案 1 :(得分:0)
如果您能够使用Java 8,您可以大大简化您的解决方案:
int[] totalGears = IntStream.range(0, gears.length)
.mapToInt(i -> Arrays.stream(gears[i]).sum()).toArray();
可以安全地处理不均匀和空的数组,并避免一些非常容易出错的迭代。