2013-02-20 62 views
3

我有整數數組「的整數像素[] []」如何找到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

回答

5

你想遍歷數組中的所有號碼,你可以用這個嘗試:

  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

0

這裏需要使用雙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

0

您需要遍歷數組中的每一行和每列,所以您需要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); 
0

提示

你有一個二維數組,所以要加每次需要遍歷各行的列元素。對於這2個循環可能有些用處。

遍歷了每一個值,並將其添加

退出循環

將您的款項與要素的數量得到平均值(你可能需要考慮一下類型轉換這裏)

0

你不在計算整數時需要雙倍的數,這是浪費,使用時間長,速度更快

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