如何将所有x数组2d数组的所有y值加到1d数组中?

时间:2015-11-16 01:35:45

标签: java arrays

我正在尝试将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]

解决了这个问题,但我不知道为什么

2 个答案:

答案 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();

可以安全地处理不均匀和空的数组,并避免一些非常容易出错的迭代。