Vorrei assegnare un insieme di variabili in java come segue:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Come posso ottenere questo risultato in Java?
Vorrei assegnare un insieme di variabili in java come segue:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Come posso ottenere questo risultato in Java?
Risposte:
Non è così che fai le cose in Java. Non ci sono variabili dinamiche in Java. Le variabili Java devono essere dichiarate nel codice sorgente 1 .
A seconda di ciò che stai cercando di ottenere, dovresti usare un array, a List
o a Map
; per esempio
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);
}
È possibile utilizzare la riflessione per fare riferimento dinamicamente a variabili che sono state dichiarate nel codice sorgente. Tuttavia, solo questo funziona per le variabili che sono membri della classe (cioè campi statici e istanza). Non funziona per le variabili locali. Vedi l'esempio "veloce e sporco" di @ fyr.
Tuttavia, fare questo genere di cose inutilmente in Java è una cattiva idea. È inefficiente, il codice è più complicato e poiché ti affidi al controllo del runtime è più fragile. E questo non è "variabili con nomi dinamici". È meglio descritto come accesso dinamico a variabili con nomi statici.
1 - Questa affermazione è leggermente imprecisa. Se utilizzi BCEL o ASM, puoi "dichiarare" le variabili nel file bytecode. Ma non farlo! In questo modo giace la follia!
Map<String, T>
invece un , non iniziare a scherzare con il tuo codice effettivo.
Se vuoi accedere alle variabili in qualche modo dinamico puoi usare la riflessione. Tuttavia, la riflessione non funziona per le variabili locali. È applicabile solo per attributi di classe.
Un esempio approssimativo, veloce e sporco è questo:
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);
}
}
}
È necessario migliorare questo codice in vari modi, è solo un esempio. Anche questo non è considerato un buon codice.
Quello che ti serve è chiamato array. Volevo scrivere il seguente codice:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
Dovresti usare List
o array
invece
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
O
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
O anche meglio
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Nomi variabili dinamici in Java
Non esiste una cosa del genere.
Nel tuo caso puoi usare array:
int[] n = new int[3];
for() {
n[i] = 5;
}
Per (name, value)
coppie più generali , usaMap<>
Prova in questo modo:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}