对于每个循环:我们可以填充数组吗?

时间:2013-08-11 07:22:34

标签: java

我可以使用每种语法从数组中读取数据:

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} 我没有发明这样的方法,而是宁愿问你我是否错了。

6 个答案:

答案 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?就如何做到这一点提出了很多建议。