2017-08-02 16 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

[sort]メソッドを使うことができると思います(http://docs.oracle.com/javase/8/docs/api/ java/util/Arrays.html#sort-T:A-java.util.Comparator-)。値が他の値より大きいときを示すラムダ式と配列を渡すだけです –

答えて

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; 
} 
関連する問題