Inisialisasi beberapa array Android Java

Saat mendeklarasikan dan menetapkan primitif sebelum loop semuanya berfungsi dengan baik dan nantinya bisa berbeda satu sama lain

//example
double sum1, sum2, sum3, sum4;
sum1 = sum2 = sum3 = sum4 = 0;
//later each gets own value correctly

Apakah mungkin membuat oneliner untuk sebuah array?

//example
double[][] compare, updated; // works as intended
compare = updated = new double[SIZE][]; // makes compare=updated

Masalah dengan baris kedua adalah ia mengabaikan semua penghitungan berikut untuk diperbarui dan mengambil nilai dari bandingkan.


person JayJayAbrams    schedule 28.07.2018    source sumber
comment
Anda dapat melakukan ini dengan primitif, tetapi tidak dengan Object. Object penggunaan referensi dan array di java adalah Object.   -  person zhh    schedule 28.07.2018


Jawaban (2)


Jika yang Anda maksud dengan "one-liner" adalah satu pernyataan dan menulis new double[] sekali, ya, Anda dapat melakukan ini:

    double[] arr1, arr2;
    arr1 = (arr2 = new double[10]).clone(); // this is the line
    arr1[0] = 10;
    System.out.println(arr2[0]); // 0.0

Tapi itu tidak terlalu mudah dibaca. Lebih buruk lagi bila Anda melakukan ini dengan lebih banyak array:

arr1 = (arr2 = (arr3 = new double[10]).clone()).clone();

Saya sarankan Anda masih menggunakan banyak baris untuk melakukan ini.

person Sweeper    schedule 28.07.2018
comment
Ya, pada dasarnya yang saya maksud adalah pernyataan satu baris. Jadi, tidak ada cara lain yang mudah untuk inisialisasi beberapa array berukuran sama, bukan? - person JayJayAbrams; 28.07.2018
comment
@JayJayAbrams Saya rasa tidak ada. - person Sweeper; 28.07.2018

Sebagai alternatif jawaban @ Sweeper, pertimbangkan untuk menggunakan metode Arrays.copyOf(), seperti yang disarankan dalam jawaban ini. Perhatikan bahwa copyOf() aman untuk tipe sedangkan metode clone() tidak.

double[] a, b, c;
c = Arrays.copyOf((b = Arrays.copyOf((a = new double[10]), a.length)), b.length);

Namun sekali lagi, saya akan tegaskan kembali seperti yang dilakukan @Sweeper, bahwa kode ini benar-benar berbau dan Anda harus mempertimbangkan untuk melakukannya dalam beberapa baris. Seperti yang dikatakan Steve McConnell dalam Code Complete 2nd Ed. , Keharusan Teknis Utama perangkat lunak adalah mengelola kompleksitas (yaitu membuat kode Anda sederhana). Ini tidak berarti mengurangi baris kode, tetapi lebih berkaitan dengan memungkinkan orang yang membaca kode Anda memahami fungsinya secara sekilas.

person entpnerd    schedule 28.07.2018
comment
Saya tidak menggunakan Arrays.copyOf karena saya mencoba menciptakan kembali nuansa a = b = c sebanyak mungkin, membuat variabel array lebih dekat. Tapi jawaban yang bagus, +1. - person Sweeper; 28.07.2018