我正在尝试使用从表示点的文本文件(每行两个整数)读取整数而创建的对象填充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();
}
答案 0 :(得分:1)
显然,代码中只有一个Point2DDemo
对象newPoint
。在while循环中,您正在使用不同的值更改相同的newPoint,并且它最终具有一对值。
您应该在循环时放置Point2DDemo newPoints = new Point2DDemo();
INTO:
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();
}
答案 1 :(得分:0)
您目前所做的只是重复设置单个Point2DDemo的值,并将多个引用添加到ArrayList
。
回答你的问题:是的,你需要为每组点创建一个新的对象。
类似的东西:
Point2D point = new Point2D( xPoint, yPoint );
应该这样做。 (这段代码不会按照书面形式运作,但会让你朝着正确的方向前进。)
答案 2 :(得分:0)
您可以使用references
将数组列表填充到相同的对象。
在循环中,您需要为每次迭代创建 new newpoints
。
这些方面的东西:
// Outside of the lopp
Pont2DDemo newpoints;
// inside the loop
newpoints = new Point2DDemo();
newPoints.putPair(pointX, pointY);
Points.add(newPoints);