Arrays Java:使用字符串数组作为变量名持有者,然后通过数组索引在别处使用变量

Arrays Java:使用字符串数组作为变量名持有者,然后通过数组索引在别处使用变量,arrays,string,variables,indexing,Arrays,String,Variables,Indexing,我尝试使用字符串数组作为不同变量名的持有者,然后使用增量数组索引来调用这些变量。因此,我创建了一个字符串数组并将其称为frac[],然后在每个索引中添加一个frac1、frac2、frac3等字符串,每个字符串都有自己的索引。变量frac1、2、3等已经单独创建,现在我想调用这些变量在代码的不同区域中使用它们,但我想使用数组,这样我就可以使用计数器循环不同的索引(变量)如何告诉Java使用字符串数组的特定索引作为变量名? 用于输入5个预先存在的变量名的数组代码: for (int w = 0;

我尝试使用字符串数组作为不同变量名的持有者,然后使用增量数组索引来调用这些变量。因此,我创建了一个字符串数组并将其称为
frac[]
,然后在每个索引中添加一个frac1、frac2、frac3等字符串,每个字符串都有自己的索引。变量frac1、2、3等已经单独创建,现在我想调用这些变量在代码的不同区域中使用它们,但我想使用数组,这样我就可以使用计数器循环不同的索引(变量)如何告诉Java使用字符串数组的特定索引作为变量名?

用于输入5个预先存在的变量名的数组代码:

for (int w = 0; w < 5; w++){
    frac[w] = "frac" + (w + 1);
}
for(int w=0;w<5;w++){
分形[w]=“分形”+(w+1);
}
我想使用数组索引(frac[z]):

for(int z=1;z<2;z++){
System.out.println(“请输入分数#“+z+”:)的分子;
n=键盘.nextInt();
System.out.println(“请输入分数#“+z+”:)的分母;
d=键盘.nextInt();
frac[z]=新分数(n,d);
}

谢谢您的帮助。

如果我正确理解了您的目标,您是否考虑过使用java.util.Map?有一些实现(TreeMap、HashMap…)

这是一个简单的数据结构,您可以在其中定义键值条目:

TreeMap<String,Fraction> frMap = new TreeMap<String,Fraction>();
frMap.put("fraz1",new Fraction(1,2));
Fraction f = frMap.get("fraz1");
TreeMap frMap=newtreemap();
frMap.put(“fraz1”,新分数(1,2));
分数f=frMap.get(“fraz1”);

你的目标并不明确, 但您可以使用java反射从其名称获取属性值:

反射的示例使用:

public class SomeClass {
  public int a;

  public static void main(String [] args) {
    SomeClass s = new SomeClass();
    s.a = 5;
    try {
      int b = (Integer) SomeClass.class.getField("a").get(s);
      System.out.println(b);
    } catch  (Exception e)  {
      e.printStackTrace();
    } 
  }
}

请注意,大多数情况下(有些人会说),反射的使用说明了糟糕的设计

我以前从未用过这个,所以我有点困惑。最后一行是什么?看起来分数F创造了一个新的变量,如果是这样的话,它会让我回到平方一。字符串数组索引[0]中的字符串“frac1”必须是程序需要创建的5个总分数中的分数#1。然后,我需要用我创建的一个类来修改每个分数,该类用于减少、获取小数等。我可以为所有五个分数手动编写该类,但该类的一个关键目标是编写更短的代码,这就是我尝试使用数组的原因。这三行代码只是如何“写”和如何“读”的示例来自地图的数据。我将我的答案扩展为5个不同的阵营的循环。好的,我想我现在可以开始工作了。我会继续玩一段时间,如果我成功了,我会发帖。感谢您的帮助。您的
for
行:
for(intz=1;z<2;z++)
将只执行一次,因为z从1到小于2,这意味着只有当z=1运行时它才会工作。我不是有意这样发布它的。我缩小了数字,这样我就可以测试它,而不必投入太多的选项。通常它的读数为z=0;z<5;z++。抢手货
public class SomeClass {
  public int a;

  public static void main(String [] args) {
    SomeClass s = new SomeClass();
    s.a = 5;
    try {
      int b = (Integer) SomeClass.class.getField("a").get(s);
      System.out.println(b);
    } catch  (Exception e)  {
      e.printStackTrace();
    } 
  }
}