2012-01-12 63 views
0

我正在使用for循环遍历所有具有相同名称的数组的列表,期望在末尾有不同的数字。例如child1,child2等我虽然如果我尝试childi我在哪里,我将能够通过所有的数组循环的变量。但是,这并不奏效。我已经将int从int更改为一个字符串,并在最后连接它,但是随后我得到一个新的变量,它与数组中的不同。有任何想法吗。在通过迭代不同的数组时遇到问题

 int i=0; 
     String []child=childi;//so child would refer to child0 then child1 
     for (int j = 0; j < child.length(); j++) { 
      Map<String, String> curChildMap = new HashMap<String, String>(); 
      children.add(curChildMap); 
      curChildMap.put(NAME, child[j]); 
      curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd"); 
     } 
     i++ 
+2

你能更好地解释你想做什么?对我来说这是一个混乱。例如,为什么要在for循环中创建一个Map *内部*,它只会在循环的每次迭代中被丢弃和重新创建?没有意义。我认为,告诉我们你要解决的总体问题,而不是你如何用代码解决问题会更好,因为我敢打赌,正确的方法会有很大的不同。 – 2012-01-12 22:41:55

回答

2

您不能通过动态计算的名称来引用变量。在这种情况下,最好的办法是创建一个数组或其他容器来容纳你的子数组。例如,

String[][] children = new String[][] { child0, child1, child2, child3, /* ... */ }; 
for (int i = 0; i < children.length; i++) { 
    String[] child = children[i]; 
    for (int j = 0; j < child.length(); j++) { 
    Map<String, String> curChildMap = new HashMap<String, String>(); 
    children.add(curChildMap); 
    curChildMap.put(NAME, child[j]); 
    curChildMap.put(IS_EVEN, (j % 2 == 0) ? "This child is even" : "This child is odd"); 
    } 
} 
+0

谢谢,我唯一一次这样做是在PHP中,我认为这是一个动态的语言 – Aaron 2012-01-13 00:04:09

1

您真的不能在代码中以这种方式设置数组的名称。你可以将编译时和运行时选项混合在一起。当程序实际运行时,变量的名称不仅是固定的,而且也是不相关的 - Java实际上只保留它用于调试(并且混淆可以在不导致程序失败的情况下更改名称)。

为了实现你的最终目标,你必须把阵列到另一个结构,也许是另一个数组,像这样:

for (int p; p < people.length(); p++) { 
    String[] child = people[p]; 
    ... 
}