2012-03-15 48 views
0

有人可以請幫我用下面的代碼。當for循環再次執行時,我的臨時Point2D數組永遠不會覆蓋前一個。JAVA - For循環不創建一個新的陣列

我使用for-loops打印數據以測試temp數組是否改變......並且它肯定不會......爲什麼會發生這樣的事情?

Point2D在不同的類中定義。它的x,y和z值是公開的。

我認爲它可能是.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); 

    } 

編輯1:只是爲了澄清...其實我是想的Point2D []溫度與每次迭代改變......但由於某種原因,它不會改變。可能是什麼問題?

編輯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's ...完全不同。

回答

2

該線路應該是外部for循環

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副本克隆:

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

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

如果像你說的,出於某種原因想臨時將被覆蓋,移動環路等(即複製陣列)的循環內

+0

感謝您的幫助!我其實想要臨時數組被覆蓋...循環的每次迭代我想要一個完全像pointArr的新數組。我改變了我的代碼,但它仍然不覆蓋temp [] – ISJ 2012-03-15 15:24:07

+0

基本上我想每次迭代都使用相同的pointArr ... – ISJ 2012-03-15 15:27:12

+0

那麼,你正在創建一個每次迭代都有臨時值的pointArr的克隆。這意味着它將包含與pointArr相同的元素。所以,你每次迭代創建一個新數組,這是一個pointArr的副本,並且由於pointArr永遠不會改變每次創建temp時的外觀。我不知道你在這裏試圖達到什麼:) – 2012-03-15 15:31:07

1

我覺得你的問題是,每當你循環時,你正在重新設置你的臨時數組到pointArr克隆。這就是爲什麼當您交換值時,每次在臨時陣列中更改它時都會丟失值,但每次都將臨時數組設置爲克隆。嘗試從for循環中聲明你的臨時數組。