Me gustaría asignar un conjunto de variables en Java de la siguiente manera:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
¿Cómo puedo lograr esto en Java?
Me gustaría asignar un conjunto de variables en Java de la siguiente manera:
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
¿Cómo puedo lograr esto en Java?
Respuestas:
No es así como se hacen las cosas en Java. No hay variables dinámicas en Java. Las variables de Java deben declararse en el código fuente 1 .
Dependiendo de lo que esté tratando de lograr, debe usar una matriz, a List
o a Map
; p.ej
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);
}
Es posible utilizar la reflexión para hacer referencia de forma dinámica a las variables que se han declarado en el código fuente. Sin embargo, esto solo funciona para variables que son miembros de la clase (es decir, campos estáticos y de instancia). No funciona para variables locales. Vea el ejemplo "rápido y sucio" de @ fyr.
Sin embargo, hacer este tipo de cosas innecesariamente en Java es una mala idea. Es ineficiente, el código es más complicado y, dado que depende de la verificación del tiempo de ejecución, es más frágil. Y esto no es "variables con nombres dinámicos". Se describe mejor como acceso dinámico a variables con nombres estáticos.
1 - Esa afirmación es ligeramente inexacta. Si usa BCEL o ASM, puede "declarar" las variables en el archivo de código de bytes. ¡Pero no lo hagas! ¡De esa manera yace la locura!
Map<String, T>
en su lugar, no comience a jugar con su código real.
Si desea acceder a las variables con algún tipo de dinámica, puede usar la reflexión. Sin embargo, Reflection no funciona para variables locales. Solo se aplica a los atributos de clase.
Un ejemplo rápido y sucio es este:
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);
}
}
}
Necesita mejorar este código de varias maneras, es solo un ejemplo. Esto tampoco se considera un buen código.
Lo que necesitas se llama matriz. Quería escribir el siguiente código:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
Deberías usar List
o en su array
lugar
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 mejor
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Nombres de variables dinámicas en Java
No existe tal cosa.
En su caso, puede usar array:
int[] n = new int[3];
for() {
n[i] = 5;
}
Para (name, value)
pares más generales , useMap<>
Prueba de esta manera:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}