0

我有一个元素数组,我想将数组中的元素用作变量。

我想这样做是因为我有一个方程,这个方程需要多个变量输入,我想初始化一个数组,遍历它,并为每个变量(或数组的每个元素)请求输入。

所以我有一个这样的数组:

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;博士我想简化为多个变量输入值的过程。

4

5 回答 5

1

您将数组初始化为:

String variableArray[] = {"a", "b", "c"}

即一个s数组String

如果你想稍后引用i-th 元素,你只需写:

variableArray[i]

没有任何int之前 - 你不能初始化数组中的单个条目。

于 2012-09-25T23:38:21.997 回答
1

两件事情;

首先,您已将数组声明为Strings 数组,因此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];
于 2012-09-25T23:45:45.643 回答
1

Java 不是那样工作的。"a"是一个字符串文字,你不能像变量一样使用它。没有什么神奇的方法可以从一个数组元素的值"a"变成一个int名为 的变量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",请执行variableValues.get("a")

于 2012-09-25T23:49:04.083 回答
0

您真正要寻找的是Map。它是从一个值到另一个值的映射集合。在您的情况下,您可以使用它将整数值(变量的值)分配给表示变量名称的字符串。

因此,您将创建一个实例Map<String, Integer>- 读取“从字符串到整数的映射”。

有关该主题的详细信息,请参阅本教程

现在你的代码会是什么样子:

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
于 2012-09-25T23:56:54.493 回答
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);
   }
}
于 2012-10-02T23:51:47.367 回答