2015-11-16 43 views
0

我试图将一个x * y int数组的所有值存储到一个x长度数组中,但不管我怎么做,我最终都会遇到各种运行时错误。这是我的当前代码:如何将所有x数组2d数组的所有y值总和为1d数组?

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

除了当我运行该程序,一切都很好,直到我打这部分在运行此,我也得到了以下内容:

大 - [I @ 33909752 java.lang.ArrayIndexOutOfBoundsException

我试着重新安排一切我能想到的。这种嵌套for循环在整个程序中多次工作,所以我无法弄清楚为什么它会在这里抛出一个错误。所有的数组都是Int数组。

编辑:解决 - 改变 totalGears [X] + =齿轮[X] [Y] 到 totalGears [X] = totalGears [X] +齿轮[X] [Y]

解决的问题,但我不知道为什么

+0

纸和铅笔这一个。我怀疑是那些'<='错误之一 – Coffee

+2

我们可以看到totalGears和gears的声明吗? – nicomp

+2

什么是'size.length'?显然它是某种“数组”,但它是正确的大小?还有什么是'orders' – 3kings

回答

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]; 
    } 
} 
+0

所以我解决了这个问题,但它仍然会抛出同样的错误。我是在倒退,我想总结的是[x] [y]数组 – Spork

+0

的所有y值(int x = 0; x Spork

+0

@Spork看到我的编辑 – Macmee

0

如果你能够使用Java 8可以简化您这样lution很多:

int[] totalGears = IntStream.range(0, gears.length) 
    .mapToInt(i -> Arrays.stream(gears[i]).sum()).toArray(); 

安全地与不平和空数组科佩斯,避免一些非常容易出错的迭代。

相关问题