如何使用数组元素声明变量?

时间:2012-09-25 23:33:44

标签: java

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

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

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

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

5 个答案:

答案 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);
   }
}