0

NetBeans 7.3.1 で Java SE を使用して開発しています。

CSV ファイルの各行の最初の 2 つの要素を読み取り、それらを Point2D 型のポイント変数に入力し、各ポイントを Point2D ベクトル座標の末尾に追加しようとしています。次のコードを使用します。

br = new BufferedReader(new FileReader(inputFileName));

Vector<Point2D> coords = new Vector<Point2D>();
Point2D newPoint=new Point2D.Double(20.0, 30.0);
while ((strLine = br.readLine()) != null){
     String [] subStrings = strLine.split(" ");
     System.out.print("Substrings = " + subStrings[0] + ", " + subStrings[1]);
     System.out.println();
     newPoint.setLocation(Float.parseFloat(subStrings[0]), Float.parseFloat(subStrings[1]));
     coords.add(newPoint);          
}

coords.add(newPoint); 必要に応じてポイントを追加しますが、coords 内のすべての既存の要素を新しいポイントに置き換えます。既存の要素が新しい要素に置き換えられないようにするにはどうすればよいですか?

4

1 に答える 1

7

すべての Point2D の値が変化する理由はcoords、ベクターにオブジェクトが 1 つしかないためです。ベクターに繰り返し追加しただけです。呼び出すsetLocationと、その単一のオブジェクトが更新され、ベクターに含まれるオブジェクトへのすべての参照に反映されます。

別のエントリを に追加するたびに、新しい Point2D を作成する必要がありますcoords

変化する

newPoint.setLocation(Float.parseFloat(subStrings[0]), Float.parseFloat(subStrings[1]));

newPoint=new Point2D.Double(Float.parseFloat(subStrings[0]), Float.parseFloat(subStrings[1]));
于 2013-08-09T02:21:41.237 に答える