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

Java 对于每个循环:我们可以填充一个数组吗?,java,Java,我可以使用以下语法从数组中读取数据: int[] a = new int[100]; for (int i = 0; i < 100; i++){ a[i] = i; } for (int element : a){ System.out.println(element); } int[]a=新的int[100]; 对于(int i=0;i

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

int[] a = new int[100];
for (int i = 0; i < 100; i++){
    a[i] = i;
}


for (int element : a){
    System.out.println(element);                         
}
int[]a=新的int[100];
对于(int i=0;i<100;i++){
a[i]=i;
}
for(int元素:a){
系统输出打印项次(元素);
}
但是否有可能以同样的方式填充数组。比如说,使用
i*2
值?

我没有发明这样一种方法,我宁愿问你我是否错了。

不,这是不可能的。您必须使用for的第一个版本。

不清楚您想要实现什么。增强的for循环只能在集合上迭代-在您的情况下,集合中没有有用的值可以开始-只有您尝试填充的集合

如果您只是试图基于某个计算填充一个数组,而该计算不是基于现有集合,那么增强的for循环就没有帮助了

即使您确实希望基于另一个集合填充数组,使用增强的for循环也不理想,因为您没有任何索引概念。例如,如果您有一个
字符串
数组,并且希望用字符串的长度填充
int
数组,则可以执行以下操作:

。。。但这并不理想。当然,如果您正在填充一个
列表
,那么您就可以调用
add

String[] words = ...; // Populate the array
List<Integer> lengths = new ArrayList<Integer>(words.length);

for (String word : words) {
    lengths.add(word.length());
}
String[]words=…;//填充数组
列表长度=新的ArrayList(words.length);
for(字符串字:字){
添加(word.length());
}

当前索引没有计数器,只有foreach循环中索引处的值,因此不可能

for-each循环隐藏迭代器,因此不能调用remove。 因此,for each
循环不能用于过滤。同样地 它不适用于需要替换循环中的元素的循环 遍历列表或数组时将其显示。最后,它不适用于循环 必须并行迭代多个集合。这些 设计师们知道了缺点,他们有意识地做出了决定 决定使用一个干净、简单的构造,它将
覆盖 绝大多数情况下


因此,简单地说,不可能填充数组。

不可能为增强型for each循环中使用的实际数组赋值。这是因为增强的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中的Enhanced for循环只提供了一点语法糖来获取数组或列表的值。在某些方面,它们的操作类似于将对象传递给方法-传递给方法的原始对象不能在方法中重新分配。例如:

int i = 1;
void multiplyAndPrint(int p) {
  p = p*2;
  System.out.println(p);
}
System.out.println(i);

将打印2,然后打印1。这与从for each循环分配值时遇到的问题相同。

为此,您需要一种方法来获取数组中“element”的索引


有很多关于如何做的建议。

您不能使用for each循环访问索引。用第一个代替。
int i = 1;
void multiplyAndPrint(int p) {
  p = p*2;
  System.out.println(p);
}
System.out.println(i);