2016-09-13 7 views
0

私の方法にはArrayListがあります。サークルの特別なクラスが含まれています。 ColoredCircleの中には、タイプPoint2D.Double p1の変数があります。これらの座標を別の座標系に変換する必要があります。私がそうすると、メソッドはArrayListを変更し、変換された座標でそれを埋めています。どうして?私は自分の変換方法で私のArrayListに触れなかった。私のデータを変更するJava - 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()); 
     } 

Transormation方法:

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; 
    } 
+2

'から来tmp2'ん? – Smutje

+3

リストには円が含まれておらず、円への参照が含まれています... – assylias

+0

なぜ変更しないのですか?arraylistからメソッドにオブジェクトを渡しています。一般的に参照渡しで値渡しされない –

答えて

2

意図したとおりに機能はすべて、一覧が参照することにより、オブジェクトを処理します。円オブジェクトを複製しないので、オブジェクトが操作されます。

リストには、それらのオブジェクトへのポインタのみが格納されます。

グーグル:参照による呼び出しは、値による呼び出し、あなたがあなたのtmp2circleListのArrayListへの参照である、と思われるようなJava

1

に詳細に読みます。あなたが参照する場所を変更しないので、あなたはいつも特定の1つのエントリが変わるのを見ていると思いますか?

あなたは具体的には、tmp2が宣言された場合(多くのコンテキストを表示する必要があるだろう、とあなたが呼び出しに「アルゴリズム」、の前に、それを設定する場所を確認すること。

+0

私は泣いています。私はコードを予告していました。今編集されています。 – user2928056

関連する問題