Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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中ArrayList的问题_Java_Arraylist - Fatal编程技术网

Java中ArrayList的问题

Java中ArrayList的问题,java,arraylist,Java,Arraylist,我无法正确添加ArrayList。在for循环完成后打印ArrayList时,ArrayList的长度是正确的,但每个元素都是相同的(创建的最后一个坐标) 有人能修复(并解释)下面的代码吗 public class test { private static ArrayList<Coordinate> mOrigCoords; private static ArrayList<Coordinate> mNewCoords; private static int mLis

我无法正确添加ArrayList。在for循环完成后打印ArrayList时,ArrayList的长度是正确的,但每个元素都是相同的(创建的最后一个坐标)

有人能修复(并解释)下面的代码吗

public class test {

private static ArrayList<Coordinate> mOrigCoords;
private static ArrayList<Coordinate> mNewCoords;
private static int mListSize;
private static int mPixelsX;

public static void main(String[] args) 
{

    mOrigCoords = new ArrayList<Coordinate>();
    mNewCoords  = new ArrayList<Coordinate>();

    mPixelsX = 480;

    int j = 0;

    Coordinate newCoord = new Coordinate(0,0);

    for(int i = 0; i < 96; i++)
    {
        j = j + 5;

        newCoord.setX(j);
        newCoord.setY((int)(Math.random()*300));

        mOrigCoords.add(newCoord);
    }

    mListSize = mOrigCoords.size();

    for(int n = 0; n < mListSize; n++)
    {
        System.out.println("test " + mOrigCoords.get(n).toString());
    }

}
}
公共类测试{
私有静态阵列文件;
私有静态数组列表mNewCoords;
私有静态int-mListSize;
私有静态int-mPixelsX;
公共静态void main(字符串[]args)
{
mOrigCoords=新的ArrayList();
mNewCoords=newarraylist();
mPixelsX=480;
int j=0;
坐标新坐标=新坐标(0,0);
对于(int i=0;i<96;i++)
{
j=j+5;
newCoord.setX(j);
setY((int)(Math.random()*300));
mOrigCoords.add(newCoord);
}
mListSize=mOrigCoords.size();
对于(int n=0;n

提前感谢您的帮助

这是因为每次在循环中添加相同的坐标对象。您需要为循环的每次迭代创建新的坐标对象。

您必须这样做:

Coordinate newCoord;
for(int i = 0; i < 96; i++)
    {
    newCoord = new Coordinate(0,0);
    ...
协调新合作社;
对于(int i=0;i<96;i++)
{
新坐标=新坐标(0,0);
...

因为在您的情况下,您正在设置相同的对象(newCoord)每次。

每次迭代都会重新添加
坐标的同一实例。然后重置该实例上的值。在循环结束时,有96个索引指向同一对象,该对象已随每次迭代而更新。

Coordinate newCoord = new Coordinate(0,0);

    for(int i = 0; i < 96; i++)
    {
        j = j + 5;

        newCoord.setX(j);
        newCoord.setY((int)(Math.random()*300));

        mOrigCoords.add(newCoord);
    }
坐标新坐标=新坐标(0,0);
对于(int i=0;i<96;i++)
{
j=j+5;
newCoord.setX(j);
setY((int)(Math.random()*300));
mOrigCoords.add(newCoord);
}
你应该

Coordinate newCoord = null;

for(int i = 0; i < 96; i++)
{
    newCoord = new Coordinate(0,0);
    j = j + 5;

    newCoord.setX(j);
    newCoord.setY((int)(Math.random()*300));

    mOrigCoords.add(newCoord);
}
坐标新坐标=null;
对于(int i=0;i<96;i++)
{
新坐标=新坐标(0,0);
j=j+5;
newCoord.setX(j);
setY((int)(Math.random()*300));
mOrigCoords.add(newCoord);
}

这样,arrayList将包含多个对象,而不是一个。arrayList中的所有元素都指向同一个对象,这就是问题的原因。

这里的问题是您从未创建CoordDinites的新实例。因此,每次修改newCoord时,您都会修改同一个实例。 Arraylist不复制对象,它只是将其引用存储在列表中,这意味着如果不创建新实例,则始终添加相同的实例

试试这个

协调新合作社

for(int i = 0; i < 96; i++)
{
    j = j + 5;

    //newCoord.setX(j);
    //newCoord.setY((int)(Math.random()*300));

    mOrigCoords.add(new Coordinate(j,(int)(Math.random()*300)));
}

mListSize = mOrigCoords.size();

for(int n = 0; n < mListSize; n++)
{
    System.out.println("test " + mOrigCoords.get(n).toString());
}
for(int i=0;i<96;i++)
{
j=j+5;
//newCoord.setX(j);
//setY((int)(Math.random()*300));
add(新坐标(j,(int)(Math.random()*300));
}
mListSize=mOrigCoords.size();
对于(int n=0;n
在上面的代码中,您每次都在添加相同的实例。您只创建了一个实例,并一次又一次地添加它,直到循环迭代

因此,每次创建一个新的坐标类实例,将其放入列表中。它将给您不同的打印结果

如另一个解决方案所示。
希望这对您有所帮助。

这是因为X和Y是“坐标”类的属性,是静态属性,所以对象在内存中有一个副本。所有实例都指向相同的地址。您不应该使用“静态”关键字,以便他们可以使用自己的副本并具有不同的值。

谢谢!我没有意识到!谢谢您的代码+解释。(大多数其他答案也是正确的,但您的答案是最努力的!)