Java'da aşağıdaki gibi bir dizi değişken atamak istiyorum:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Bunu Java'da nasıl başarabilirim?
Java'da aşağıdaki gibi bir dizi değişken atamak istiyorum:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Bunu Java'da nasıl başarabilirim?
Yanıtlar:
Java'da işler böyle yapmaz. Java'da dinamik değişkenler yoktur. Java değişkenleri kaynak kodu 1'de belirtilmelidir .
Neyi başarmaya çalıştığınıza bağlı olarak bir dizi, a List
veya a kullanmalısınız Map
; Örneğin
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);
}
Kaynak kodda bildirilen değişkenlere dinamik olarak başvurmak için yansıma kullanmak mümkündür . Ancak, bu yalnızca sınıf üyesi olan değişkenler (yani statik ve örnek alanlar) için çalışır. Yerel değişkenler için çalışmaz. @ Fyr'nin "hızlı ve kirli" örneğine bakın.
Ancak bu tür şeyleri gereksiz yere Java'da yapmak kötü bir fikirdir. Verimsizdir, kod daha karmaşıktır ve çalışma zamanı kontrolüne güvendiğiniz için daha kırılgandır. Ve bu "dinamik adlara sahip değişkenler" değildir. Statik adlara sahip değişkenlere dinamik erişim olarak daha iyi tanımlanır.
1 - Bu ifade biraz yanlış. BCEL veya ASM kullanıyorsanız, değişkenleri bayt kodu dosyasında "bildirebilirsiniz". Ama bunu yapma! Bu yol deliliktir!
Map<String, T>
bunun yerine bir kullanın, gerçek kodunuzla uğraşmaya başlamayın.
Değişkenlere bir çeşit dinamik erişmek istiyorsanız, yansımayı kullanabilirsiniz. Ancak Yansıma yerel değişkenler için işe yaramaz. Yalnızca sınıf nitelikleri için geçerlidir.
Kaba, hızlı ve kirli bir örnek şudur:
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);
}
}
}
Bu kodu çeşitli şekillerde geliştirmeniz gerekir, bu sadece bir örnektir. Bu aynı zamanda iyi bir kod olarak kabul edilmez.
İhtiyacınız olan şeyin adı dizi. Aşağıdaki kodu yazmak istedim:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
List
Veya array
bunun yerine kullanmalısınız
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Veya
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
Hatta daha iyisi
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Java'da Dinamik Değişken Adları
Böyle bir şey yoktur.
Sizin durumunuzda dizi kullanabilirsiniz:
int[] n = new int[3];
for() {
n[i] = 5;
}
Daha genel (name, value)
çiftler için kullanınMap<>
Şu yolu deneyin:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}