0

我试图用从代表点的文本文件中读取整数(每行两个整数)创建的对象填充 arrayList。我正在尝试循环执行此操作。ArrayList 似乎填满了,但是当我打印出来之后,每个索引中的所有元素都与添加到 ArrayList 的最后一个元素相同。这似乎与指向对象的每个 arrayList 索引有关(我的新手猜测)。我必须为每个 arrayList 条目创建一个唯一的对象吗?有没有一种简单的方法可以添加到此代码中来做到这一点?

public class Point2DDemo extends Point2D<Double>
{
    ArrayList<Point2DDemo> Points = new ArrayList<Point2DDemo>(7);


    /**
     * Constructor for objects of class Point2DDemo
     */
    public Point2DDemo()
    {

    }

    public Point2DDemo(double first, double second)
    {
        setFirst(first);
        setSecond(second);
    }

    public void putPair(double point1, double point2){
        this.setFirst(point1);
        this.setSecond(point2);
    }

    /**
     * 
     * 
     * @param  y   a sample parameter for a method
     * @return     the sum of x and y 
     */
    public void createList()
    {
        FileIO readFile = new FileIO();
        readFile.openInputFile();
        String pointLine = null;

        Point2DDemo newPoints = new Point2DDemo();

        StringTokenizer stringSplit = null;

        while(readFile.hasInputLine())
        {

           pointLine = readFile.readInputLine();
           stringSplit = new StringTokenizer(pointLine);

           double pointX = Double.parseDouble(stringSplit.nextToken());
           double pointY = Double.parseDouble(stringSplit.nextToken());


           newPoints.putPair(pointX, pointY);

           Points.add(newPoints);





        }
        for(int i = 0; i < Points.size(); i++)
         System.out.println(Points.get(i));

         readFile.closeInputFile();

    }
4

3 回答 3

1

显然,您在整个代码中只有一个Point2DDemo对象。newPoint在您的 while 循环中,您正在用不同的值更改同一个 newPoint,它最终有一对值。

你应该把Point2DDemo newPoints = new Point2DDemo();INTO while 循环:

public void createList()
{
    FileIO readFile = new FileIO();
    readFile.openInputFile();
    String pointLine = null;

    StringTokenizer stringSplit = null;

    while(readFile.hasInputLine())
    {


       Point2DDemo newPoints = new Point2DDemo();
       pointLine = readFile.readInputLine();
       stringSplit = new StringTokenizer(pointLine);

       double pointX = Double.parseDouble(stringSplit.nextToken());
       double pointY = Double.parseDouble(stringSplit.nextToken());


       newPoints.putPair(pointX, pointY);

       Points.add(newPoints);

    }
    for(int i = 0; i < Points.size(); i++)
     System.out.println(Points.get(i));

     readFile.closeInputFile();

}
于 2013-04-13T03:22:20.510 回答
0

您当前所做的只是重复设置单个 Point2DDemo 的值并将对它的多个引用添加到ArrayList.

要回答您的问题:是的,您需要为每组点创建一个新对象。

就像是:

Point2D point = new Point2D( xPoint, yPoint );

应该做。(这段代码不会像写的那样工作,但会让你朝着正确的方向前进。)

于 2013-04-13T03:23:24.953 回答
0

发生的情况是您将数组列表填充references同一个对象。

在您的循环中,您需要为每次迭代创建新的。 newpoints

这些方面的东西:

// Outside of the lopp
Pont2DDemo newpoints;

// inside the loop
newpoints = new Point2DDemo();
newPoints.putPair(pointX, pointY);
Points.add(newPoints);
于 2013-04-13T03:24:14.940 回答