【发布时间】:2011-01-11 21:16:34
【问题描述】:
如何使用循环设置变量的值? 例如:
String cur[]= {"A","B"};
String strA,strB;
for(int i =0;i < cur.length;i++) {
str+i = "Blah";
}
“str+i”部分应该包含什么内容,以便将 strA 和 strB 设置为“Blah”?
谢谢
【问题讨论】:
标签: java arrays variables loops
如何使用循环设置变量的值? 例如:
String cur[]= {"A","B"};
String strA,strB;
for(int i =0;i < cur.length;i++) {
str+i = "Blah";
}
“str+i”部分应该包含什么内容,以便将 strA 和 strB 设置为“Blah”?
谢谢
【问题讨论】:
标签: java arrays variables loops
你不这样做。相反,您创建了某种类型的集合。例如,您可以使用地图:
String[] cur = { "A", "B" };
Map<String, String> map = new HashMap<String, String>;
for (String name : cur)
map.put(name, "Blah");
}
除非您使用反射(这对局部变量没有帮助),否则您无法“计算”要使用的变量名称...而且您不应该将反射用于某些事情像这样。
假设您想通过字符串名称访问值。如果您可以使用连续的整数范围(从 0 开始),那么数组或 List<T> 可能更合适。这取决于你想做什么。
【讨论】:
没有简单的方法可以完全按照您的意愿行事。但是,有一个简单的替代方案:不要单独命名您的字符串,只需使用单个数组。
String[] cur = new String[2];
for (int i = 0; i < cur.length; ++i) {
cur[i] = "Blah";
}
如果您必须通过名称而不是索引访问这些字符串,请考虑创建一个Map<String, String>。
【讨论】:
你不能。你可能不应该。
严格来说,你应该使用 java.lang.reflect 类。它允许您使用我们的 javascript 和/或 ruby 等语言进行某种动态成员访问。但在这种情况下似乎有点过分了。
另一个更有用的解决方案是什么先生。乔恩·斯基特提议。根据您的实际需要,它可能会起作用。
【讨论】:
你可以做类似的事情,虽然我不知道你为什么要这样做:
import java.lang.reflect.Field;
public class Test {
static public String strA, strB;
public static void main(String args[]) throws Exception {
String cur[]= {"A","B"};
for(int i =0;i < cur.length;i++) {
Field field = Test.class.getField("str" + cur[i]);
field.set(null, "Blah");
}
System.out.println(strA);
System.out.println(strB);
}
}
【讨论】: