Bagaimana cara mendefinisikan variabel dalam jumlah tak terbatas? *Jawa*

Saya sedang membuat game, dan itu membutuhkan Persegi Panjang dalam jumlah tak terbatas. Misalnya, saya memberi nama variabel mobil:

public Rectangle car1;
public Rectangle car2;
public Rectangle car3;

dan seterusnya,

Apakah ada cara yang lebih mudah? Menyukai:

public int carNumber;
public Rectange car + carNumber;//if carNumber was one, it would be called car1

Selain itu, saya perlu menguji apakah persegi panjang tersebut berisi persegi panjang lainnya. ‹-- Saya tahu cara melakukan ini.


person Calan54    schedule 13.04.2014    source sumber
comment
Tip: Jika yang Anda maksud adalah Anda tidak mengetahui sebelumnya berapa banyak persegi panjang yang Anda perlukan, kata yang tepat adalah tidak tentu, bukan tidak terbatas.   -  person ajb    schedule 13.04.2014


Jawaban (5)


Anda tidak dapat dan tidak boleh mencoba mendeklarasikan sesuatu yang jumlahnya tidak terbatas -- itu tidak masuk akal. Alih-alih gunakan koleksi seperti ArrayList yang dapat menampung sejumlah variabel referensi objek. misalnya.,

private List<Rectangle> carList = new ArrayList<>();

Ini tidak akan berhasil:

public Rectange car + carNumber;//if carNumber was one, it would be called car1

karena nama variabel tidak berfungsi seperti itu, mereka tidak dapat dibuat dengan menggabungkan String. Namun jangan khawatir tentang hal ini, karena ArrayList akan menangani hal ini. Item ketiga dalam daftar dapat diperoleh dengan cukup mudah: carList.get(2).


Untuk melihat apakah ada Rectangle dalam daftar yang berisi Rectangle lain, gunakan perulangan for dan ulangi koleksinya:

for (Rectangle rect : carList) {
  if (rect.contains(testRectangle) {
     // this item contains the test Rectangle
  }
}
person Hovercraft Full Of Eels    schedule 13.04.2014
comment
Terima kasih, tapi apakah ini masih memungkinkan saya untuk menguji metode berisi () dengan masing-masing Rectangles? - person Calan54; 13.04.2014
comment
@Gokarting54: ya tentu saja. Bukan variabel yang penting di sini; objek dan referensi objek itulah yang penting. - person Hovercraft Full Of Eels; 13.04.2014
comment
Ah, begitu. Ini adalah pertanyaan pertama saya di StackOverflow, jadi saya tidak punya banyak reputasi, tetapi jika saya punya, ini akan mendapat suara positif - person Calan54; 13.04.2014
comment
@ Gokarting54: jangan khawatir tentang suara positif. Anda selalu dapat kembali lagi nanti. Harap perhatikan penambahan informasi loop for untuk menguji penahanan. - person Hovercraft Full Of Eels; 13.04.2014
comment
Jadi dalam pernyataan 'untuk' yang digunakan di atas, testRectangle akan menjadi car1. Jika saya memiliki 20 mobil, apakah saya akan mereplikasi kode yang sama sebanyak 20 kali, dan mengubah nama 'testRectangle'? Atau akankah lebih mudah membuat perulangan 'sementara'? - person Calan54; 13.04.2014
comment
@ Gokarting54 Tolong jangan mereplikasi kode 20 kali. Saya tidak tahu apakah lebih mudah untuk mereplikasi kode (mungkin dengan beberapa editor teks mewah). Tapi ini adalah praktik pemrograman yang buruk. Jika Anda harus membuat perubahan pada algoritme Anda, dan Anda memiliki kode yang sama sebanyak 20 kali, Anda harus membuat perubahan di 20 tempat--apa yang terjadi jika Anda lupa satu kode? - person ajb; 14.04.2014

Anda akan menggunakan ArrayList untuk melakukan ini

person yitzih    schedule 13.04.2014

Array adalah static memory allocation. Anda selalu perlu menyatakan ukuran array pada saat pembuatan array, sehingga tidak mungkin memiliki array "tak terbatas". Yang Anda cari disebut dynamic memory allocation.

Salah satu contoh penggunaan memori dinamis adalah ArrayList.

ArrayList memungkinkan Anda memperluasnya saat elemen ditambahkan dan mengecilkannya saat elemen dihapus. Anda dapat memperluas ukuran ArrayList yang disebut "tak terhingga" dengan terus menambahkan elemen ke dalamnya. Namun batas jumlah elemen yang dapat Anda tambahkan bergantung pada seberapa banyak memori yang dimiliki sistem Anda.

Pada dasarnya, dynamic memory allocation adalah apa yang Anda cari. Anda juga dapat mempertimbangkan untuk menggunakan Vector.

person user3437460    schedule 13.04.2014
comment
1+ meskipun Vector API merekomendasikan agar ArrayLists digunakan secara istimewa. - person Hovercraft Full Of Eels; 13.04.2014
comment
+1 untuk ArrayList, -1 untuk Vektor. Vektor sangat tersinkronisasi, dan jika ada banyak objek di dalamnya, overhead yang disinkronkan akan mulai bertambah. - person Makoto; 13.04.2014
comment
@Makoto Haruskah saya menghapus baris terakhir saya tentang vektor? - person user3437460; 13.04.2014

Maaf Anda tidak dapat melakukannya di JAVA. Anda tidak dapat membuat nama variabel secara dinamis.

Saya sedang membuat game, dan itu membutuhkan Persegi Panjang dalam jumlah tak terbatas.

Anda akan mendapatkan OutOfMemory jika jumlah Persegi Panjang tidak terbatas. Tolong pikirkan lagi.


Anda dapat menggunakan array statis jika jumlah persegi panjang sudah diketahui.

Rectangle[] rec = new Rectangle[size];  

//get the first Rectangle 
Rectangle first = rec[0];

// get the total no of Rectangles
int length = rec.length();
person Braj    schedule 13.04.2014

dalam kode umum seperti:

car1 = "blue";
car2 = "red";
car3 = "green";

adalah 99% lebih baik dinyatakan sebagai array

cars = ["blue", "red", "green"]

Di Java, array memiliki panjang yang tetap ketika Anda menginisialisasinya, jadi Anda bisa membuatnya besar atau Anda bisa menggunakan ArrayList seperti yang disebutkan di atas yang merupakan struktur daftar yang memungkinkan penambahan satu per satu.

person AuthorOfTheSurf    schedule 13.04.2014