2012-03-15 19 views
0

誰かが次のコードで助けてくれますか?私のtemp配列のPoint2Dは、forループが再び実行されるときに、前のものを上書きすることはありません。JAVA - Forループは新しい配列を作成しません

テンポラリ配列が変化するかどうかをテストするためにfor-loopsを使ってデータを出力しましたが、確かにそうではありません...なぜこのようなことが起こりますか?

Point2Dは別のクラスで定義されています。 x、y、zの値はpublicです。

私はそれが.clone()関数かもしれないと思いますか?

ありがとうございます!


Point2D[] pointArr; 
pointArr = populateArr(N); 

    for (int i = 0; i < N; i++) 
    { 
     Point2D[] temp = pointArr.clone(); 

     if (i >= 0) 
     { 
      Point2D exch = temp[i]; 
      temp[i] = temp[0]; 
      temp[0] = exch; 
     //temp[0].z = 0.0; 
     } 

     System.out.println(); 

     temp = determine_slopes(temp, N); 

     Arrays.sort(temp, temp[0].X_ORDER); 

    } 

EDIT 1:ちょうど私が実際にされたPoint2D []一時は反復ごとに変更したい...明確にする...しかし、いくつかの理由で変更されません。何が問題なのでしょうか?

EDIT 2:pointArrのための私の出力は次の通りである:

10000 0 0.0 0 10000 0.0 3000 7000 0.0 7000 3000 0.0 20000 21000 0.0 3000 4000 0.0 14000 15000 0.0 6000 7000 0.0

私が最初の反復の後にtempを印刷すると、私の出力はpointArrのようには見えません。まったく異なります。

答えて

2

この行はループ

Point2D[] temp = pointArr.clone(); 
4

配列宣言は、ループの外に移動しなければならないために外であるべきです。そうでなければ、あなたは以前のものを上書きし、配列の新しいインスタンスにループの各反復を作成します。

Point2D[] pointArr; 
pointArr = populateArr(N); 
Point2D[] temp = pointArr.clone(); //move to here 

    for (int i = 0; i < N; i++) 
    { 


     if (i >= 0) 
     { 
      Point2D exch = temp[i]; 
      temp[i] = temp[0]; 
      temp[0] = exch; 
     //temp[0].z = 0.0; 
     } 

     System.out.println(); 

     temp = determine_slopes(temp, N); 

     Arrays.sort(temp, temp[0].X_ORDER); 

    } 

編集:これは役立つが、代わりにループを使用してpointArrのコピーを作成してみます イムかわからないがクローンの:

+0

助けてくれてありがとう!実際にはtemp配列を上書きする必要があります...ループの各反復私はpointArrとまったく同じ新しい配列が必要です。私は自分のコードを変更しましたが、それでもtemp []を上書きしません。 – ISJ

+0

基本的には、各繰り返しで同じpointArrが必要です... – ISJ

+0

まあ、tempArrの複製をtempごとに作成しています。これは、pointArrと同じ要素を含むことを意味します。ですから、あなたは新しい配列を繰り返し作成しています。それはpointArrのコピーで、pointArrは決してtempを変更しないので、作成されるたびに同じように見えます。あなたがここに収穫しようとしているものは確かではありません:) –

1

Point2D[] pointArr; 
pointArr = populateArr(N); 
Point2D[] temp; 

for(int i=0; i<pointArr.length; i++) 
    pointArr[i]=temp[i]; 

あなたは、あなたが言うように、何らかの理由で一時を上書きしたい場合は、などのループを移動(配列をコピーすること)あなたのループ内で私はあなたの問題はすべてのことだと思いますあなたがループしている時、あなたは一時配列を再設定していますpointArrクローンに追加します。そのため、値を交換するときには、一時配列で変更するb/cごとに失われますが、毎回一時配列を複製に設定するのはそのためです。 forループからtemp配列を宣言してみてください。

関連する問題