Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用for each循环将对象指定给点阵列_Java_Arrays_Object - Fatal编程技术网

Java 如何使用for each循环将对象指定给点阵列

Java 如何使用for each循环将对象指定给点阵列,java,arrays,object,Java,Arrays,Object,编辑:是的,我知道如何使用for循环 我这样做 Point [] pointArray = new Point [10]; for(Point p : pointArray) p = new Point(1,2); 但这行打印的是null System.out.println(pointArray[0]); //Prints null 尽管这样做是可以的 pointArray[0] = new Point(1,2); System.o

编辑:是的,我知道如何使用for循环

我这样做

    Point [] pointArray = new Point [10];

    for(Point p : pointArray)
        p = new Point(1,2);
但这行打印的是
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]

为什么会这样?

在增强for循环中,p不是数组元素的别名。它只包含元素的值,而不引用数组中的对象

您正在对空值进行迭代,并将新的点对象指定给引用,但实际上并没有将其存储到数组中,因此,您无法查看记录。

您不能使用增强的for循环通过迭代器修改或写入数组中的数据,只能读取它

但是,常规for循环可以修改数据

    for(int i =0; i < array.length; i++){
          array[i] = point(1,2)
   }
for(int i=0;i

@蛛形纲蜂巢

正如蜘蛛纲蜂心在他的回答中所说


“在增强的for循环中,p不是数组元素的别名。它只有元素的值,而不引用数组中的对象”

首先,您需要了解它们之间的区别

foreach与for:基本区别

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

for(int i = 0; i < array.length; i++)  {
   if(i < 10)  {
      //Do some work
   }  else  {
      //Do other stuff
   }
}
不建议这样做,因为变量范围并不理想,而for循环的基本格式只是此用例的标准和预期格式

如果


需要访问迭代器以删除当前元素。for each循环的隐藏迭代器,因此不能调用remove/add。因此,for-each循环不可用于过滤。同样,它也不适用于需要在遍历列表或数组时替换其中元素的循环。

如其他答案中所述,如果希望为数组中的元素赋值,请使用数组索引

但是,您可能想考虑使用java 8流来创建和初始化数组,而不是将其拆分为两个操作。我发现这是一种相当方便的方法来设置这种类型的数组

例如:

Point[] points = IntStream.range(0, 10).map(n -> new Point(n, 2)).toArray();
这避免了必须使用索引遍历数组的问题

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
for(int i=0;i
使用forearch循环填充数组没有任何意义,因为它不是数组的用途。以下是一种方法:

for (int i = 0; i < pointArray.length; i++)
    pointArray[i] = new Point(0,0);
for(int i=0;i

现在数组“pointArray”已初始化,您可以使用foreach循环访问其元素。

因此
p
中的
for(Pointer p:pointArray)
是对数组中引用的对象的引用。数组中引用的对象为空。当我给它分配一个新对象时,我只是引用了
p

啊,没什么。我不知道。知道为什么吗?蛛形纲动物havemind解释得很好。。。
for (int i = 0; i < pointArray.length; i++)
    pointArray[i] = new Point(0,0);