2013-02-20 3 views
3

у меня есть массив ВНУТР пикселей [] [] 'Integer массивыкак найти сумму всех значений в 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

+0

Вы можете использовать 2 вложенных цикла для достижения всех элементов. – Henry

ответ

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

+0

@ user1110338 - Если это правильный ответ на свой вопрос, отметьте его как таковой, независимо от того, исправили ли вы его сами или нет. – webnoob

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

'+ =' не является оператором, '+ =' is. – jlordo

+0

обновлен. Это была опечатка. Давай! – SudoRahul

+1

Я взял свой -1 назад, когда вы удалили ошибку. Я советую вам ввести код в вашу среду IDE, а затем скопировать/вставить свой ответ здесь. Это предотвратит такие ошибки компилятора. – jlordo

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

ПОДСКАЗКА

у вас есть 2D массив, поэтому для добавления каждого элемента вам необходимо пройти каждый столбец каждой строки. Для этого 2 для циклов могут быть полезны.

траверса по каждому значению и добавить их

выхода петлю

Разделите сумму с числом элементов, чтобы получить среднее значение (возможно, вам нужно подумать о печатает литье здесь)

0

вы не вам нужно удвоить, когда вы посчитаете сумму ints, это отходы, используйте длинные, это быстрее

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

Смежные вопросы