在Java中使用动态名称分配变量
我想在java中分配一组变量,如下所示:在Java中使用动态名称分配变量,java,variables,dynamic-variables,Java,Variables,Dynamic Variables,我想在java中分配一组变量,如下所示: int n1,n2,n3; for(int i=1;i<4;i++) { n<i> = 5; } intn1、n2、n3; 对于(int i=1;i您应该使用List或array List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); 甚至更好 Map<String, Integ
int n1,n2,n3;
for(int i=1;i<4;i++)
{
n<i> = 5;
}
intn1、n2、n3;
对于(int i=1;i您应该使用List
或array
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
甚至更好
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Map Map=newhashmap();
地图放置(“n1”,1);
地图放置(“n2”,2);
//有条件地得到
map.get(“n1”);
您应该使用列表
或数组
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
甚至更好
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("n1", 1);
map.put("n2", 2);
//conditionally get
map.get("n1");
Map Map=newhashmap();
地图放置(“n1”,1);
地图放置(“n2”,2);
//有条件地得到
map.get(“n1”);
您需要的是命名数组。我想编写以下代码:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
int[]n=新的int[4];
对于(int i=1;i您需要的是命名数组。我想编写以下代码:
int[] n = new int[4];
for(int i=1;i<4;i++)
{
n[i] = 5;
}
int[]n=新的int[4];
对于(inti=1;i这不是Java中的操作方式。Java中没有动态变量。Java变量必须在源代码1中声明
根据您试图实现的目标,您应该使用数组、列表或地图,例如
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);
}
int n[]=新的int[3];
对于(int i=0;i<3;i++){
n[i]=5;
}
列表n=新的ArrayList();
对于(int i=1;i<4;i++){
n、 增加(5);
}
Map n=新的HashMap();
对于(int i=1;i<4;i++){
n、 put(“n”+i,5);
}
可以使用反射动态引用源代码中声明的变量。但是,此仅适用于类成员变量(即静态和实例字段)。它不适用于局部变量。请参见@fyr的“快速脏”示例
然而,在Java中不必要地做这种事情是一个坏主意。它效率低下,代码更复杂,而且由于您依赖于运行时检查,因此它更脆弱。这不是“具有动态名称的变量”。最好将其描述为对具有静态名称的变量的动态访问
1-这句话有点不准确。如果你使用BCEL或ASM,你可以在字节码文件中“声明”变量。但是不要这样做!这样做是疯狂的!这不是你在Java中做事情的方式。Java中没有动态变量。Java变量必须在源代码中声明1
根据您试图实现的目标,您应该使用数组、列表或地图,例如
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);
}
int n[]=新的int[3];
对于(int i=0;i<3;i++){
n[i]=5;
}
列表n=新的ArrayList();
对于(int i=1;i<4;i++){
n、 增加(5);
}
Map n=新的HashMap();
对于(int i=1;i<4;i++){
n、 put(“n”+i,5);
}
可以使用反射动态引用源代码中声明的变量。但是,此仅适用于类成员变量(即静态和实例字段)。它不适用于局部变量。请参见@fyr的“快速脏”示例
然而,在Java中不必要地做这种事情是一个坏主意。它效率低下,代码更复杂,而且由于您依赖于运行时检查,因此它更脆弱。这不是“具有动态名称的变量”。最好将其描述为对具有静态名称的变量的动态访问
1-这句话有点不准确。如果你使用BCEL或ASM,你可以在字节码文件中“声明”变量。但是不要这样做!这样做是疯狂的!Java中的动态变量名
没有这样的事
在您的情况下,您可以使用阵列:
int[] n = new int[3];
for() {
n[i] = 5;
}
对于更一般的(名称、值)
对,请使用Java中的Map
动态变量名
没有这样的事
在您的情况下,您可以使用阵列:
int[] n = new int[3];
for() {
n[i] = 5;
}
对于更一般的(名称、值)
对,请使用Map
尝试以下方法:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}
HashMap HashMap=newhashmap();
对于(int i=1;i请尝试以下方法:
HashMap<String, Integer> hashMap = new HashMap();
for (int i=1; i<=3; i++) {
hashMap.put("n" + i, 5);
}
HashMap HashMap=newhashmap();
对于(int i=1;i如果您想访问某种类型的动态变量,可以使用反射。但是反射不适用于局部变量。它仅适用于类属性
一个粗略、快速、肮脏的例子如下:
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);
}
}
}
公共类T{
公共整数n1;
公共整数n2;
公共整数n3;
public void accessAttributes()引发IllegalArgumentException、SecurityException、IllegalAccessException、,
NoSuchFieldException{
对于(int i=1;i<4;i++){
T.class.getField(“n”+i).set(本,5);
}
}
}
您需要以各种方式改进此代码—这只是一个示例。这也被认为是不好的代码。如果您想访问某种动态变量,可以使用反射。但是反射不适用于局部变量。它仅适用于类属性
一个粗略、快速、肮脏的例子如下:
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);
}
}
}
公共类T{
公共整数n1;
公共整数n2;
公共整数n3;
public void accessAttributes()引发IllegalArgumentException、SecurityException、IllegalAccessException、,
NoSuchFieldException{
对于(int i=1;i<4;i++){
T.class.getField(“n”+i).set(本,5);
}
}
}
您需要以各种方式改进此代码—这只是一个示例。这也被认为是不好的代码。您没有。您可以做的最接近的事情是使用贴图来模拟它,或者定义您自己要处理的对象。您没有。您可以做的最接近的事情是使用贴图来模拟它,或者定义您自己的对象要处理的对象。您能澄清您的问题吗?您需要对局部变量执行此操作?为什么不使用数组元素?@Eng.Fouad:我想动态访问变量的名称。@Ashish Anand您的意思是您能澄清您的问题吗?您需要对局部变量执行此操作?为什么不使用数组元素?@Eng.Fouad:我想要按名称动态访问变量。@Ashish Anand您的意思是不需要吗