2014-01-06 70 views
0

基本上我想排序從更高的humberlowe數字使用「Arrays.Sort」。可悲的是,雖然我不知道如何將它從高到低排序,因爲「Arrays.sort」將這些數組從低到高排序。Arrays.sort從較高的數字到較低的數字?

有什麼建議嗎?

代碼:

double sortArrays[] = { 
     (float) probabilityOfFlush, 
     (float) probabilityOfFullHouse, 
     (float) probabilityOfOnePair, 
     (float) probabilityOfPoker, 
     (float) probabilityOfRoad, 
     (float) probabilityOfRoyalFlush, 
     (float) probabilityOfTriple, 
     (float) probabilityOfTwoPairs 
    }; 

    Arrays.sort (sortArrays); 
    System.out.println(Arrays.toString(sortArrays)); 

那麼,輸出會是這樣一個例子:

[0.0,0.18018017709255219,0.36036035418510437,2.3423423767089844,2.882882833480835,2.882882833480835,4.504504680633545,45.76576614379883]

+0

退房重載'sort'方法。你需要使用'Double'數組。 –

+0

您可以實現該比較器 – Aroon

+1

爲什麼標記爲[eclipse](http://stackoverflow.com/tags/eclipse/info)? –

回答

4
Arrays.sort(array,Collections.reverseOrder()); 

As Bhesh在下面指出,您需要使用Double[]陣列而不是double[],因爲這在基元類型上不起作用。

直接應用到您的代碼:

Double[] sortArrays = { 
    (Double) probabilityOfFlush, 
    (Double) probabilityOfFullHouse, 
    (Double) probabilityOfOnePair, 
    (Double) probabilityOfPoker, 
    (Double) probabilityOfRoad, 
    (Double) probabilityOfRoyalFlush, 
    (Double) probabilityOfTriple, 
    (Double) probabilityOfTwoPairs 
}; 

Arrays.sort(sortArrays, Collections.reverseOrder()); 
System.out.println(Arrays.toString(sortArrays)); 

我改變double sortArrays[]Double[] sortArrays

  • 在[]位置的變化不會有所作爲,但它的編碼風格問題/偏愛。
  • 但是Double中的首字母D確實如此。該首字母D使用對象類型Double而不是基本類型double

您還需要將import java.util.Collections;添加到類文件的頂部。由於您提到您使用的是eclipse,因此您可以按住ctrl + shift並按o通過導入未導入的類,刪除未使用的導入以及按程序包組織導入來自動處理導入。

+2

+1,但是你可以添加Sotirios在評論中指出的內容,因爲OP有一個double []而不是Double []。 –

+0

@BheshGurung好抓,沒有注意到。 – turbo

+0

你能否給我一個關於我在郵報中寫的代碼的例子?可悲的是它不適合我:S。 反正謝謝! – user3077388

2

有關列表

Collections.sort(list ,Collections.reverseOrder()); 

對於數組

Arrays.sort(array, Collections.reverseOrder()); 

Collections.reverseOrder()使用比較逆自然順序。

注意:它無法對基元數組進行排序,因此您需要將基元轉換爲它們各自的對象。整型對於int,雙雙,布爾布爾等

示例使用

Double sortArrays[] = new Double[]{1.0,2.0,3.0,5.0,6.0}; 
Arrays.sort(sortArrays, Collections.reverseOrder()); 
System.out.println(Arrays.toString(sortArrays)); 
//output [6.0, 5.0, 3.0, 2.0, 1.0] 
0

我會建議使用比較

Arrays.sort(array, new Comparator<Double>() 
{ 
    @Override 
    public int compare(Double x, Double y) 
    { 
     return y - x; 
    } 
}); 

使用與YX一個比較器將排序最高到最低,x - y會從最低到最高排序。

1

如果你想保持與基元,你可以排序你的數組,然後扭轉它。請注意,您將不得不使用apache library。這將在O(nlogn)

Arrays.sort(array); 
ArrayUtils.reverse(array); 

運行如果你不想使用exernal庫,你可以把代碼:

public static void reverse(double[] array) { 
      if (array == null) { 
       return; 
      } 
      int i = 0; 
      int j = array.length - 1; 
      double tmp; 
      while (j > i) { 
       tmp = array[j]; 
       array[j] = array[i]; 
       array[i] = tmp; 
       j--; 
       i++; 
      } 
} 
+0

我可以使用這個,但turbo代碼似乎更容易! 但是,無論如何謝謝你! – user3077388

+0

@ user3077388該解決方案需要2行代碼:P,並且您正在處理基元。 – user2336315

+0

那麼你知道我很笨,我應該採取這一個,因爲它很簡單,它自己解釋... – user3077388