bagaimana cara menemukan jumlah semua nilai dalam Java int[][]?

saya memiliki array array integer 'int piksel[][]'

dan saya ingin mencari jumlah semuanya sehingga saya dapat menemukan nilai piksel rata-rata

ini akan digunakan agar saya dapat mengatur nilai rata-rata sebuah piksel menjadi nilai ambang batas untuk gambar pbm

jika nilainya di atas ambang batas saya akan mengekspor piksel putih jika di bawah saya akan mengekspor piksel hitam (hanya untuk memberikan konteks)

Saya berasumsi kode di bawah ini tidak benar sama sekali karena outputnya 6.0 tetapi menurut saya kira-kira seperti ini

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

person AngryDuck    schedule 20.02.2013    source sumber
comment
Ulangi setiap baris, dan ulangi setiap sel untuk menjumlahkan semuanya. Anda memerlukan loop bersarang untuk itu.   -  person jlordo    schedule 20.02.2013
comment
Anda dapat menggunakan 2 loop bersarang untuk menjangkau semua elemen.   -  person Henry    schedule 20.02.2013


Jawaban (5)


Apakah Anda ingin mengulangi semua nomor dalam array, Anda dapat mencoba dengan ini:

           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);
person Jason    schedule 20.02.2013
comment
terima kasih saya baru menyadarinya segera setelah saya mempostingnya (selalu membantu mengetik atau membicarakan masalah, biasanya hanya menemukan itu yang berhasil menjawabnya) lagipula Anda benar jadi saya tidak akan menerima jawabannya - person AngryDuck; 20.02.2013
comment
@ user1110338 - Jika ini adalah jawaban yang benar untuk pertanyaan Anda, tandai jawaban tersebut terlepas apakah Anda memperbaikinya sendiri atau tidak. - person webnoob; 20.02.2013

PETUNJUK

Anda memiliki array 2D, Jadi untuk menambahkan setiap elemen Anda perlu melintasi setiap kolom di setiap baris. Untuk ini 2 for loop mungkin berguna.

melintasi setiap nilai dan menambahkannya

lingkaran keluar

Bagilah jumlah Anda dengan jumlah elemen untuk mendapatkan rata-rata (Anda mungkin perlu memikirkan untuk mengetikkan casting di sini)

person Mukul Goel    schedule 20.02.2013

Anda perlu mengulangi setiap baris dan kolom dalam array, jadi Anda memerlukan 2 for-loop. Apa yang Anda lakukan saat ini hanya mencakup hal-hal berikut: (0,0), (1,1), (2,2), ....

Ini akan berhasil: (dengan asumsi array tidak bergerigi, setidaknya untuk perhitungan ambang batas)

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);

Atau lebih sederhananya: (dengan asumsi array tidak bergerigi, setidaknya untuk perhitungan ambang batas)

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);
person Bernhard Barker    schedule 20.02.2013

Anda perlu menggunakan for ganda di sini. Sesuatu seperti ini:-

for(int i = 0; i < pixels.length; i++){
        for(int i = 0; i < pixels[i].length; i++){
               threshold += (double)pixels[i][j];
        }
}
person RainMaker    schedule 20.02.2013
comment
+ = bukan operator, += adalah. - person jlordo; 20.02.2013
comment
Saya mengambil kembali -1 saya, saat Anda menghapus kesalahan. Saya menyarankan Anda untuk membuat kode di IDE Anda dan kemudian menyalin/menempelkan jawaban Anda di sini. Ini akan mencegah kesalahan kompiler tersebut. - person jlordo; 20.02.2013

Anda tidak memerlukan dobel saat menghitung jumlah int, ini sia-sia, gunakan lama, lebih cepat

    long sum = 0;
    int n = 0;
    for (int[] a : pixels) {
        for (int e : a) {
            sum += e;
            n++;
        }
    }
    double avg = ((double) sum) / n;
person Evgeniy Dorofeev    schedule 20.02.2013
comment
sedikit optimasi: n += a.length; sebelum loop dalam ;) - person jlordo; 20.02.2013