编辑:是的我知道如何使用for循环
我这样做
null
但这行打印 System.out.println(pointArray[0]); //Prints null
pointArray[0] = new Point(1,2);
System.out.println(pointArray[0]); //Prints java.awt.Point[x=1,y=2]
虽然可以这样做
/ c"\progra"
为什么?
答案 0 :(得分:1)
在增强的for循环中,p不是数组元素的别名。它只有它没有引用数组中对象的元素的值
答案 1 :(得分:0)
您正在迭代空值,并且您正在将新的Point对象分配给引用,但实际上并未将其存储到数组中,因此您无法查看记录。
答案 2 :(得分:0)
您无法使用增强型for循环通过迭代器修改或写入数组中的数据,只能读取它。
常规for循环可以修改数据......
for(int i =0; i < array.length; i++){
array[i] = point(1,2)
}
...
@Arachnid Hivemind
正如Arachnid Hivemind在他的回答中所说的那样......
“在你的增强型for循环中,p不是数组元素的别名。它只有元素的值,它不引用数组中的对象”
答案 3 :(得分:0)
首先,你需要了解它们之间的差异
foreach vs.for:基本差异
for
和foreach
之间唯一的实际区别在于,对于可索引对象,您无权访问索引。需要基本for循环的示例:
for(int i = 0; i < array.length; i++) {
if(i < 10) {
//Do some work
} else {
//Do other stuff
}
}
虽然您可以使用foreach
手动创建单独的索引int-variableint idx = -1;
for(int i : intArray) {
idx++;
...
}
不建议这样做,因为变量范围并不理想,而循环的基本只是这个用例的标准和预期格式。
如果
,则无法使用Foreact循环需要访问iterator
才能删除当前元素。 for-each循环隐藏了迭代器,因此您无法调用删除/添加。因此,for-each循环不可用于过滤。类似地,它不适用于需要在遍历时替换列表或数组中的元素的循环。
答案 4 :(得分:0)
如其他答案所述,如果您希望为数组中的元素赋值,请使用数组索引。
但是,您可能会考虑使用java 8流来创建和初始化数组,而不是将其拆分为两个操作。我发现这是设置这种类型数组的一种相当方便的方法。
例如:
Point[] points = IntStream.range(0, 10).map(n -> new Point(n, 2)).toArray();
这避免了必须使用索引迭代数组的问题。
答案 5 :(得分:0)
for (Point p : pointArray)
// rest of the code goes here
以上陈述与
相同for (int i = 0; i < pointArray.length; i++)
Point p = pointArray[i];
// rest of the code goes here
使用forearch循环来填充数组是没有意义的,因为它不是它的目的。这是一种方法:
for (int i = 0; i < pointArray.length; i++)
pointArray[i] = new Point(0,0);
现在您的数组“pointArray”已初始化,您可以使用foreach循环来访问其元素。
答案 6 :(得分:0)
因此p
中的for(Pointer p : pointArray)
是对数组中引用的对象的引用。数组中引用的对象为null。当我为其分配一个新对象时,我只是引用p
。