3

私は整数配列「intピクセル[] []」の配列を持っています

そして、平均ピクセル値を見つけることができるように、それらすべての合計を見つけたい

これは、ピクセルの平均値を pbm 画像のしきい値に設定できるようにするために使用されます。

値がしきい値を超えている場合は白いピクセルをエクスポートし、その下にある場合は黒いピクセルをエクスポートします(コンテキストを提供するためだけに)

出力が6.0であるため、以下のコードはまったく正しくないと思いますが、このようなものだと思います

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

5 に答える 5

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);
于 2013-02-20T11:35:31.297 に答える
0

ヒント

2D配列があるので、各要素を追加するには、各行の各列をトラバースする必要があります。この2つのforループは、ある程度役立つ可能性があります。

各値をトラバースして追加します

終了ループ

合計を要素の数で割って平均を求めます(ここで型キャストについて考える必要があるかもしれません)

于 2013-02-20T11:37:16.840 に答える
0

int の合計を数えるときに double は必要ありません。これは無駄です。long を使用すると高速です。

    long sum = 0;
    int n = 0;
    for (int[] a : pixels) {
        for (int e : a) {
            sum += e;
            n++;
        }
    }
    double avg = ((double) sum) / n;
于 2013-02-20T11:39:24.773 に答える
0

ここでは double を使用する必要がありforます。このようなもの:-

for(int i = 0; i < pixels.length; i++){
        for(int i = 0; i < pixels[i].length; i++){
               threshold += (double)pixels[i][j];
        }
}
于 2013-02-20T11:35:34.433 に答える
0

配列内の各行と列を反復処理する必要があるため、2 つの for ループが必要です。あなたが現在行っていることは、次のことだけをカバーしています: (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);
于 2013-02-20T11:36:24.107 に答える