2016-03-24 78 views
0

我正在嘗試編寫一個接口方法,該方法接收各種對象的數組,並根據對象的getMeasure()方法的返回值交換兩個數組元素。交換對象數組成員Java

我的問題是如何交換兩個數組元素時,它是一個對象或如何存儲一個臨時對象的值,當你不知道什麼對象是必然的。

這裏是我到目前爲止的代碼:

public static void swapMinAndMax(Measurable[] objects) 
{ 
    double largest = 0; 
    int lgIndex = 0; 
    int smIndex = 0; 

    for(int i = 1; i < objects.length; i++) 
    { 
     if(objects[i].getMeasure() > largest){ 
      largest = objects[i].getMeasure(); 
      lgIndex = i; 
     }     
    } 
    for(int i = 0; i < objects.length; i++) 
    { 
     if(objects[i].getMeasure() < largest){ 
      largest = objects[i].getMeasure(); 
      smIndex = i; 
     }   
    } 
    //need to swap objects[lgIndex] with objects[smIndex] 
} 
+2

只要做到這一點就像你會與原始。是什麼讓你覺得它的工作方式不同?請注意,對象數組元素始終是引用。 – Thomas

回答

0

您可以使用Measurable變量做掉。

Measurable measurable = objects[lgIndex]; 
objects[lgIndex] = objects[smIndex]; 
objects[smIndex] = measurable; 
+0

謝謝你的工作完美。 –

0

你知道對象是什麼,它是一個Measurable。因此:

//need to swap objects[lgIndex] with objects[smIndex] 
Measurable temp = objects[smIndex]; 
objects[smIndex] = objects[lgIndex]; 
objects[lgIndex] = temp; 
+0

其實不,我不知道。我對編程相當陌生。但它是有道理的,它的工作原理非常感謝! –

0

首先,你是比較你的smallestlargest(這是不是你想要的),你可以找到的最小和最大的一個循環。最後,以swap存儲一個具有臨時引用的值;然後將其他值替換爲未存儲的值,最後將未修改的位置設置爲臨時值。類似的,

public static void swapMinAndMax(Measurable[] objects) { 
    int lgIndex = 0; 
    int smIndex = 0; 

    for (int i = 1; i < objects.length; i++) { 
     if (objects[i].getMeasure() > objects[lgIndex].getMeasure()) { 
      lgIndex = i; 
     } 
     if (objects[i].getMeasure() < objects[smIndex].getMeasure()) { 
      smIndex = i; 
     } 
    } 
    if (lgIndex != smIndex) { 
     Measure t = objects[lgIndex]; 
     objects[lgIndex] = objects[smIndex]; 
     objects[smIndex] = t; 
    } 
} 
+0

謝謝,這似乎是一個更明顯的做法。 (我還是個初學者)非常感謝! –

0

您正在擔心一個不存在的問題。在Java中,您不能直接觸摸對象;你只處理對象的引用。特別是,您的Measurable[]是對Measurable類型對象的引用的數組。對象的數據不在那裏。所有你需要調換,因此,是參考自己,併爲你的原語你可以放心地使用相同的模式:

Measurable temp = objects[i]; 
objects[i] = objects[j]; 
objects[j] = temp; 

但是,如果你喜歡的俏皮話和一次性的對象,那麼你可能會也這樣做...

Collections.swap(Arrays.asList(objects), i, j); 

......它本質上是相同的事情,效率較低。