使用每个循环的“高级”在Java中初始化数组
是否可以使用’advanced’for循环在Java中初始化数组?
例如
Integer[ ] numbers = new Integer[20]; int counter = 0; for ( Integer i : numbers ) { i = counter++; } for ( Integer i : numbers ) { System.out.println(i); }
这打印所有空值,为什么?
不,因为您没有分配给数组,所以您将分配给名为i
的临时变量。 该arrays没有看到变化。
以下显示使用normal for
循环的大致等效代码。 这应该可以更容易地了解为什么它无法更新数组:
for (int j = 0; j < numbers.length; j++) { Integer i = arr[j]; // i is null here. i = counter++; // Assigns to i. Does not assign to the array. }
您将null值作为输出的原因是您不在数组中存储任何值。
您可以使用foreach循环初始化数组,但是您必须手动维护计数器以引用数组元素:
for (Integer i : numbers ){ numbers[counter] = counter; counter++; }
显然,这不是foreach循环的预期用例。 为了解决您的问题,我建议使用“传统”for循环:
for (int i = 0; i < numbers.length; i++){ numbers[i] = i; }
注意,可以使用Arrays.fill(int [] array,int val)填充具有相同值的所有元素。
基本上没有,不是你想要的。 在’advanced’for循环中,无法访问隐藏的计数器,也没有在相应的arrays插槽上执行写访问。
‘高级’for循环不会向您公开计数器,因此,您无法将counter++
的结果写入特定的数组插槽。
你的情况是没有制作’高级’for循环的情况。 看到:
http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html
看看最后一段。
在你的情况下,你不能。 For-each隐藏了底层集合上的迭代器,所以在这里你无法弄清楚当你尝试“初始化”数组时你当前在“数字”中的位置。 这是一个不使用“高级”循环的用例。