如何找到int [] [] Java中所有值的总和?

问题描述:

我有整数数组“的整数像素[] []”如何找到int [] [] Java中所有值的总和?

的阵列,并且我想找到所有这些的总和,所以我可以找到的平均像素值

这将被使用,以便我可以将一个像素的平均值设置为一个pbm图像的阈值

如果高于阈值i的值将导出一个白色像素,如果它的下面我将导出一个黑色像素(只是为了给出一些上下文)

我认为下面的代码是不正确的,因为它的输出6.0,但我认为它的东西这样

double threshold = 0; 
    for(int i = 0; i < pixels.length; i++) 
    { 
     threshold += (double)pixels[i][i]; 
    } 
    System.out.print(threshold); 
+0

遍历每一行,迭代每个单元格以添加全部。你需要嵌套循环。 – jlordo 2013-02-20 11:34:41

+0

您可以使用2个嵌套循环来访问所有元素。 – Henry 2013-02-20 11:34:48

你想遍历数组中的所有号码,你可以用这个尝试:

  double threshold = 0; 
      for(int i = 0; i < pixels.length; i++) 
      { 
       for(int j=0;j<pixels[i].length;j++){ 
        threshold += (double)pixels[i][j]; 
       } 
      } 
      System.out.print(threshold); 
+0

谢谢我刚刚意识到这一点,只要我发布它(总是有助于键入或讨论一个问题,通常发现,单独解决答案)无论如何,你是对的如此生病接受回答 – AngryDuck 2013-02-20 11:42:54

+0

@ user1110338 - 如果这是正确回答你的问题,无论你是否自己修复它,都要将它标记为这样。 – webnoob 2013-02-20 11:46:45

这里需要使用双for。类似这样的: -

for(int i = 0; i < pixels.length; i++){ 
     for(int i = 0; i < pixels[i].length; i++){ 
       threshold += (double)pixels[i][j]; 
     } 
} 
+0

'+ ='不是运算符,'+ ='是。 – jlordo 2013-02-20 11:40:40

+0

已更新。这是一个错字。来吧! – SudoRahul 2013-02-20 11:41:56

+1

我拿回我的-1,因为你删除了错误。我建议你在IDE中编码,然后在这里复制/粘贴你的答案。这将防止这种编译器错误。 – jlordo 2013-02-20 11:43:13

您需要遍历数组中的每一行和每列,所以您需要2个for-loops。你目前的工作只包括以下内容:(0,0), (1,1), (2,2), ...

这将工作:(假设非交错数组,至少为所述阈值计算)

long sum = 0; 
for (int i = 0; i < pixels.length; i++) 
for (int j = 0; j < pixels[i].length; j++) 
{ 
    sum += pixels[i][j]; 
} 
double threshold = (double)sum/(pixels.length * pixels[0].length); 
System.out.print(threshold); 

或者更简单地说:(假设非交错数组,至少为所述阈值计算)

long sum = 0; 
for (int[] i: pixels) 
for (int j: i) 
{ 
    sum += j; 
} 
double threshold = (double)sum/(pixels.length * pixels[0].length); 
System.out.print(threshold); 

提示

你有一个二维数组,所以要加每次需要遍历各行的列元素。对于这2个循环可能有些用处。

遍历了每一个值,并将其添加

退出循环

将您的款项与要素的数量得到平均值(你可能需要考虑一下类型转换这里)

你不在计算整数时需要双倍的数,这是浪费,使用时间长,速度更快

long sum = 0; 
    int n = 0; 
    for (int[] a : pixels) { 
     for (int e : a) { 
      sum += e; 
      n++; 
     } 
    } 
    double avg = ((double) sum)/n; 
+0

稍微优化:'n + = a.length;'内循环之前;) – jlordo 2013-02-20 11:45:54