我有一个元素数组,我想将数组中的元素用作变量。
我想这样做是因为我有一个等式,等式需要多个变量输入,我想初始化一个数组,迭代它,并为每个变量(或数组的每个元素)请求输入。
所以我有一个像这样的数组:
String variableArray[] = {"a", "b", "c"}
现在我正在迭代这个数组并从用户那里获得输入:
for(int i=0; i<3; i++) {
System.out.printf("Enter value for %s: ", variableArray[i]);
int variableArray[i] = keysIn.nextInt();
}
问题是这行不能编译:
int variableArray[i] = keysIn.nextInt();
本质上,我想使用数组variableArray [](即a,b和c)的元素作为变量,因此我不必对每个变量执行相同的处理。当有很多变量需要输入时,我无法想象它是如何完成的(我不想全部输出)。
tl; dr我想简化为多个变量输入值的过程。
答案 0 :(得分:1)
您将数组初始化为:
String variableArray[] = {"a", "b", "c"}
即。一组String
s。
如果您想稍后参考i
- 元素,您只需写下:
variableArray[i]
之前没有任何int
- 您无法初始化数组中的单个条目。
答案 1 :(得分:1)
两件事;
首先,您已将您的数组声明为String
的数组,因此variableArray[i] = keysIn.nextInt()
将无法正常工作,int
无法存储在String
中阵列。
其次,int variableArray[i] = keysIn.nextInt();
不正确,因为variableArray
已经被声明(作为String
数组而variableArray[i]
是该数组的String
元素)
该行应为variableArray[i] = keysIn.next();
,但这将存储用户输入的文本,而不是数值。
它看起来像是......
String labelArray[] = {"a", "b", "c"}
int variableArray[] = new int[3];
// You could declare this as
// int variableArray[] = {0, 0, 0};
// if you wanted the array to be initialized with some values first.
for(int i=0; i<3; i++) {
System.out.printf("Enter value for %s: ", labelArray[i]);
variableArray[i] = keysIn.nextInt();
}
<强>已更新强>
int a = variableArray[0];
int b = variableArray[1];
int c = variableArray[2];
答案 2 :(得分:1)
Java不能那样工作。 "a"
是一个字符串文字,你不能像使用它一样使用它。从一个数值元素为"a"
的数组元素到一个名为int
的{{1}}变量,没有什么神奇的方法。
然而,你可以做的一些事情可能与你想要的完全相同。
a
要获取String variableArray[] = {"a", "b", "c"}
int valueArray[] = new int[variableArray.length];
for(int i=0; i<3; i++) {
System.out.printf("Enter value for %s: ", variableArray[i]);
valueArray[i] = keysIn.nextInt();
}
的值,请执行"a"
。
这是另一个更复杂的建议:
valueArray[0]
要获取String variableArray[] = {"a", "b", "c"}
HashMap<String, Integer> variableValues = new HashMap<String, Integer>();
for(int i=0; i<3; i++) {
System.out.printf("Enter value for %s: ", variableArray[i]);
variableValues.put(variableArray[i], keysIn.nextInt());
}
的值,请执行"a"
。
答案 3 :(得分:0)
您实际需要的是Map。它是从一个值到另一个值的映射集合。在您的情况下,您可以使用它将整数值(变量的值)分配给表示变量名称的字符串。
因此,您将创建Map<String, Integer>
的实例 - 读取“从String到Integer的映射”。
有关此主题的详细信息,请参阅this tutorial。
现在你的代码会是什么样子:
String[] variableNames = { "a", "b", "c" };
// create the map object
Map<String, Integer> variableValues = new LinkedHashMap<String, Integer>();
// read variable values and put the mappings into the map
for (int i = 0; i < variableNames.length; i++) {
System.out.printf("Enter value for %s: ", variableNames[i]);
variableValues.put(variableNames[i], keysIn.nextInt());
}
// print value of each variable
for (int i = 0; i < variableNames.length; i++) {
String varName = variableNames[i];
System.out.println(varName + " = " + variableValues.get(varName));
}
输出:
Enter value for a: 5
Enter value for b: 4
Enter value for c: 8
a = 5
b = 4
c = 8
答案 4 :(得分:0)
请谨慎使用,但在阅读完其他答案的评论后,您可能会更接近您想要的反射方式:
import java.lang.reflect.Field;
import java.util.Scanner;
public class VariableInput {
public static class Input {
public int a;
public int b;
public int c;
}
public static void main(String[] args) throws IllegalArgumentException,
IllegalAccessException {
Scanner keysIn = new Scanner(System.in);
Field[] fields = Input.class.getDeclaredFields();
Input in = new Input();
for (int i = 0; i < 3; i++) {
System.out.printf("Enter value for %s: ", fields[i].getName());
fields[i].set(in, keysIn.nextInt());
}
int d = in.a + in.b + in.c;
System.out.println("d=" + d);
}
}