我的方法中有一个ArrayList
。它包含一类特殊的圆圈。在ColoredCircle
内,有一个Point2D.Double p1
类型的变量。我必须在不同的坐标系上转换这些坐标。当我这样做时,该方法正在改变我的ArrayList,用变换后的坐标填充它。为什么?我甚至没有在我的转换方法中触摸ArrayList
。
public ArrayList<ColoredCircle> algorithm(final ArrayList<ColoredCircle> circleList) {
ColoredCircle a = circleList.get(0);
ColoredCircle b = circleList.get(1);
ColoredCircle c = circleList.get(2);
for (ColoredCircle cr : circleList) {
System.out.println("algo"+ cr.getPoint().getX()+" "+cr.getPoint().getY());
}
Point2D.Double circleCoordinateC1 = this.transorm_coordinates_circle(b.center, a.getPoint());
for (ColoredCircle cr : circleList) {
System.out.println("algo2"+ cr.getPoint().getX()+" "+cr.getPoint().getY());
}
转化方法:
public Point2D.Double transorm_coordinates_circle(Point2D.Double circle_center, Point2D.Double point) {
double x = point.getX() - circle_center.getX();
double y = (point.getY() - circle_center.getY()) * -1;
point.setLocation(x, y);
System.out.println("Point "+point.getX()+" "+point.getY());
return point;
}
答案 0 :(得分:2)
一切按预期工作,List通过引用处理对象。您不克隆圆形对象,因此操纵对象。
列表只存储指向这些对象的指针。
google:通过引用调用,按值调用并在java中读取其详细信息
答案 1 :(得分:1)
看起来,您的tmp2
是对circleList
ArrayList的引用。既然你没有改变它引用的地方,我假设你总是看到一个特定的一个条目在变化?
在调用“algorithm”之前,您必须显示更多上下文(特别是声明tmp2
的位置以及设置它的位置,以确保。