2017-08-02 36 views
0

我被要求在Java中切換對象數組中的最大值和最小值。我寫了我的代碼,這似乎是合理的,但由於某些原因,值不切換?我不太清楚我的代碼有什麼問題,有人能指出我的方向嗎?謝謝!!在Java中切換對象數組中的最小值和最大值

這是我的代碼:

public class Measurables 
{ 
    /** 
     Swaps the values with the smallest and largest measure. 
     @param objects an array of objects of a class that implements the 
     Measurable interface. 
    */ 
    public static void swapMinAndMax(Measurable[] objects) 
    { 

     Measurable largest = objects[0]; 
     Measurable smallest = largest; 
     for (int i = 1 ; i < objects.length ; i++) 
     { 
     Measurable current = objects[i]; 
     if (largest.getMeasure() < current.getMeasure()) 
     { 
      largest = current; 
     } 
     if (smallest.getMeasure() < current.getMeasure()) 
     { 
      smallest = current; 
     } 
     Measurable temp = largest; 
     largest = smallest; 
     smallest = temp; 

     } 
     } 
} 

這是我所得到的,當我運行測試儀:

Testers 

Running Tester.java 

fail 
[Uruguay, Thailand, Belgium] 
Expected: [Uruguay, Belgium, Thailand] 
Running Tester2.java 

fail 
[BankAccount[balance=1000.0], BankAccount[balance=3000.0], BankAccount[balance=2000.0]] 
Expected: [BankAccount[balance=3000.0], BankAccount[balance=1000.0], BankAccount[balance=2000.0]] 
Running Tester3.java 

pass 
[Uruguay] 
Expected: [Uruguay] 
+2

您不保存交換的數組。 您正在測試每個值,但是不會按照您想要的方式返回數組排序 – sheplu

+0

要擴展sheplu的評論:不需要返回數組,您可以對其進行修改。但是你不會改變這些項目,只是你指向的局部變量。即最後做'objects [largest_index] =最小;對象[smallest_index] =最大;'。 (你還需要跟蹤這些索引。) – user2478398

+0

我認爲你可以使用[排列]方法[在Arrays類中](http://docs.oracle.com/javase/8/docs/api/的java/UTIL/Arrays.html#排序-T:A-java.util.Comparator-)。只需傳遞數組和一個lambda表達式,以指示值何時比其他值大 –

回答

1

可以儲存您的元素的索引,以便您可以執行在之後交換您確定最小和最大的指數。另外,你似乎已經將最小值換成了對比值。類似的,

public static void swapMinAndMax(Measurable[] objects) { 
    int largest = 0, smallest = 0; 
    for (int i = 1; i < objects.length; i++) { 
     Measurable current = objects[i]; 
     if (objects[largest].getMeasure() < current.getMeasure()) { 
      largest = i; 
     } 
     if (objects[smallest].getMeasure() > current.getMeasure()) { 
      smallest = i; 
     } 
    } 
    // Now swap, we know the indexes. 
    Measurable temp = objects[largest]; 
    objects[largest] = objects[smallest]; 
    objects[smallest] = temp; 
} 
相關問題