如何使用for循环将对象分配给Point数组

时间:2016-02-19 05:26:32

标签: java arrays object

编辑:是的我知道如何使用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"

为什么?

7 个答案:

答案 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:基本差异

forforeach之间唯一的实际区别在于,对于可索引对象,您无权访问索引。需要基本for循环的示例:

for(int i = 0; i < array.length; i++)  {
   if(i < 10)  {
      //Do some work
   }  else  {
      //Do other stuff
   }
}

虽然您可以使用foreach

手动创建单独的索引int-variable
int 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