我可以使用每种语法从数组中读取数据:
int[] a = new int[100];
for (int i = 0; i < 100; i++){
a[i] = i;
}
for (int element : a){
System.out.println(element);
}
但同样可以填充数组。说,i*2
值为{
1}
我没有发明这样的方法,而是宁愿问你我是否错了。
答案 0 :(得分:7)
来自Java Docs,
for-each循环隐藏迭代器,因此您无法调用remove。 因此,for-each
循环不可用于过滤。同样 它不适用于需要替换元素中的元素的循环 遍历它时的列表或数组。最后,它不适用于循环 必须并行迭代多个集合。这些 有意识的设计师知道缺点 决定采用干净,简单的结构
覆盖 绝大多数情况。
因此,简单来说,它不可能填充数组。
答案 1 :(得分:3)
目前还不清楚你想要实现的目标。增强的for循环只能遍历集合 - 在您的情况下,您不会在集合中具有有用的值 - 只有您尝试填充的集合。
如果您只是尝试根据基于现有集合的不的某些计算来填充一个数组,则增强的for循环无效。
即使你做想要根据另一个集合填充数组,使用增强的for循环也不理想,因为你没有任何索引的概念。例如,如果您有String
数组并且想要使用字符串的长度填充int
数组,则可以执行:
String[] words = ...; // Populate the array
int[] lengths = new int[words.length];
int index = 0;
for (String word : words) {
lengths[index++] = word.length();
}
......但这并不理想。如果你填充List
当然更好,那么你只需拨打add
:
String[] words = ...; // Populate the array
List<Integer> lengths = new ArrayList<Integer>(words.length);
for (String word : words) {
lengths.add(word.length());
}
答案 2 :(得分:2)
不,不可能。您必须使用for的第一个版本。
答案 3 :(得分:1)
当前索引没有计数器,只是foreach循环中索引处的值,因此无法实现。
答案 4 :(得分:1)
无法为每个循环的增强型中使用的实际数组赋值。这是因为增强的for-each循环不允许您访问数组的指针。为了更改数组的值,您必须说:
a[i] = anything
但是,您可以使用增强的for循环将值分配给另一个数组,如下所示:
int[] nums = new int[4];
int[] setNums = {0,1,2,3};
i = 0;
for(int e: setNums) {
nums[i++] = e*2;
}
Java中增强的for循环只提供一点语法糖来获取数组或List的值。在某些方面,它们的操作类似于将对象传递给方法 - 传递给方法的原始对象无法在方法中重新分配。例如:
int i = 1;
void multiplyAndPrint(int p) {
p = p*2;
System.out.println(p);
}
System.out.println(i);
将打印2然后再打印1.这与尝试从for-each循环分配值时遇到的问题相同。
答案 5 :(得分:1)
要做到这一点,你需要一种方法来获取数组中'element'的索引。
How to find the index of an element in an array in Java?就如何做到这一点提出了很多建议。