Je voudrais attribuer un ensemble de variables en java comme suit:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Comment puis-je y parvenir en Java?
Je voudrais attribuer un ensemble de variables en java comme suit:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
Comment puis-je y parvenir en Java?
Réponses:
Ce n'est pas ainsi que vous faites les choses en Java. Il n'y a pas de variables dynamiques en Java. Les variables Java doivent être déclarées dans le code source 1 .
En fonction de ce que vous essayez de réaliser, vous devez utiliser un tableau, a List
ou a Map
; par exemple
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);
}
Il est possible d'utiliser la réflexion pour faire référence dynamiquement à des variables qui ont été déclarées dans le code source. Cependant, cela seulement fonctionne que pour les variables qui sont membres de la classe (c'est-à-dire les champs statiques et d'instance). Cela ne fonctionne pas pour les variables locales. Voir l'exemple "rapide et sale" de @ fyr.
Cependant, faire ce genre de chose inutilement en Java est une mauvaise idée. C'est inefficace, le code est plus compliqué, et comme vous comptez sur la vérification à l'exécution, il est plus fragile. Et ce ne sont pas des "variables avec des noms dynamiques". Il est mieux décrit comme un accès dynamique aux variables avec des noms statiques.
1 - Cette déclaration est légèrement inexacte. Si vous utilisez BCEL ou ASM, vous pouvez «déclarer» les variables dans le fichier bytecode. Mais ne le fais pas! De cette façon, c'est la folie!
Map<String, T>
plutôt un , ne commencez pas à jouer avec votre code réel.
Si vous voulez accéder aux variables d'une sorte de dynamique, vous pouvez utiliser la réflexion. Cependant, Reflection ne fonctionne pas pour les variables locales. Elle ne s'applique qu'aux attributs de classe.
Un exemple rapide et sale est le suivant:
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);
}
}
}
Vous devez améliorer ce code de différentes manières, ce n'est qu'un exemple. Ce n'est pas non plus considéré comme un bon code.
Ce dont vous avez besoin est nommé array. Je voulais écrire le code suivant:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
Vous devriez utiliser List
ou à la array
place
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Ou
int[] arr = new int[10];
arr[0]=1;
arr[1]=2;
Ou encore mieux
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Noms de variables dynamiques en Java
Une telle chose n'existe pas.
Dans votre cas, vous pouvez utiliser array:
int[] n = new int[3];
for() {
n[i] = 5;
}
Pour des (name, value)
paires plus générales , utilisezMap<>
Essayez de cette façon:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}