Saya ingin menetapkan satu set variabel di java sebagai berikut:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Bagaimana saya bisa mencapai ini di Jawa?
Saya ingin menetapkan satu set variabel di java sebagai berikut:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Bagaimana saya bisa mencapai ini di Jawa?
Jawaban:
Ini bukan cara Anda melakukan sesuatu di Java. Tidak ada variabel dinamis di Java. Variabel Java harus dideklarasikan dalam kode sumber 1 .
Bergantung pada apa yang ingin Anda capai, Anda harus menggunakan array, a List
atau a Map
; misalnya
int n[] = new int[3];
for (int i = 0; i < 3; i++) {
n[i] = 5;
}
List<Integer> n = new ArrayList<Integer>();
for (int i = 1; i < 4; i++) {
n.add(5);
}
Map<String, Integer> n = new HashMap<String, Integer>();
for (int i = 1; i < 4; i++) {
n.put("n" + i, 5);
}
Refleksi dapat digunakan untuk secara dinamis merujuk ke variabel yang telah dideklarasikan dalam kode sumber. Namun, ini hanya berfungsi untuk variabel yang merupakan anggota kelas (yaitu bidang statis dan instance). Ini tidak berfungsi untuk variabel lokal. Lihat contoh "cepat dan kotor" @ fyr.
Namun melakukan hal semacam ini secara tidak perlu di Java adalah ide yang buruk. Ini tidak efisien, kodenya lebih rumit, dan karena Anda mengandalkan pemeriksaan runtime, ini lebih rapuh. Dan ini bukan "variabel dengan nama dinamis". Ini lebih baik dijelaskan sebagai akses dinamis ke variabel dengan nama statis.
1 - Pernyataan itu sedikit tidak akurat. Jika Anda menggunakan BCEL atau ASM, Anda dapat "mendeklarasikan" variabel dalam file bytecode. Tapi jangan lakukan itu! Begitulah letak kegilaan!
Map<String, T>
, jangan mulai mengotak-atik kode Anda yang sebenarnya.
Jika Anda ingin mengakses variabel semacam dinamika, Anda dapat menggunakan refleksi. Namun Refleksi tidak berfungsi untuk variabel lokal. Ini hanya dapat diterapkan untuk atribut kelas.
Contoh kasar dan cepat kotor adalah ini:
public class T {
public Integer n1;
public Integer n2;
public Integer n3;
public void accessAttributes() throws IllegalArgumentException, SecurityException, IllegalAccessException,
NoSuchFieldException {
for (int i = 1; i < 4; i++) {
T.class.getField("n" + i).set(this, 5);
}
}
}
Anda perlu memperbaiki kode ini dengan berbagai cara, ini hanya contoh. Ini juga tidak dianggap sebagai kode yang baik.
Yang Anda butuhkan bernama array. Saya ingin menulis kode berikut:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
Anda harus menggunakan List
atau array
sebagai gantinya
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Atau
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
Atau bahkan lebih baik
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Nama Variabel Dinamis di Jawa
Tidak ada hal seperti itu.
Dalam kasus Anda, Anda dapat menggunakan array:
int[] n = new int[3];
for() {
n[i] = 5;
}
Untuk (name, value)
pasangan yang lebih umum , gunakanMap<>
Coba cara ini:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}