2016-03-29 16 views
0

Tam sayı dizisini en yüksekten en düşüğe doğru sıralamaya çalışıyorum.Bir diziyi ters sırada sıralamak - tersine çevirmiyor

int[] array = {2, 6, 4, 1};  
Arrays.sort(array); 
Collections.reverse(Arrays.asList(array)); 
for (int num : array) { 
    System.out.println(num); 
} 

Bu artan sırayla dizi yazdırır - 1, 2, 4, 6. Neden tersine çevrilmiyor ya da dizi neden tersine çevrilmiş halde saklanmıyor?

+0

. Bu listeyi saklayabilir ve sonra tekrar bir diziye dönüştürebilir miyim? Ya da bir diziyi tersine çevirmenin daha kolay bir yolu var mı? – KOB

cevap

2

en "kolay" çözüm Collections sınıfı tarafından sağlanan reverseComperator kullanmak olacaktır. Bu, diziyi otomatik olarak azalan düzende sıralar.

public static void main(String[] args) { 
    // Use the Wrapper class, otherwise you can´t call Arrays.sort with a comperator. 
    Integer[] array = {2, 6, 4, 1}; 
    Arrays.sort(array, Collections.reverseOrder()); 
    for (int num : array) { 
     System.out.println(num); 
    } 
} 

Çözümünüz neden çalışmıyor?
Geçici olarak Arrays.asList(array) numaralı bir listeyi oluşturursunuz, tersine çevirirsiniz ve daha sonra belirtilmez. Bu, array değişkeninin sırasını değiştirmeyecektir.

0

Diziyi sıralamanın sonucunu görüntülüyorsanız, listenin geri alınması sonucu değil. Sıralı listeyi geçici bir değişkende saklamanız, tersine çevirmeniz ve ardından istediğiniz davranışı elde etmek için toArray'ı çağırmanız gerekir.

ters sırada sıralamak için daha kolay bir yol yapmaktır:

Arrays.sort(array, (o1,o2)-> Integer.compare(o2,o1)); 
0

Kodunuzda çeşitli sorunlar var: Arrays.asList, yeni bir List<Integer> oluşturmuyor, aslında bir List<int[]>. Ancak, beklediğiniz gibi çalışsa bile, döndürülen liste yalnızca geçici bir nesnedir, hala diziyi yazdırıyorsunuz demektir.

Maalesef doğru çözüm çok şık değil: Anlıyorum

int[] array = {2, 6, 4, 1};  
Arrays.sort(array); 
List<Integer> asList = new ArrayList<Integer>(); 
for(int i : array) { 
    asList.add(i); 
} 
Collections.reverse(asList); 
for (int num : asList) { 
    System.out.println(num); 
} 
İlgili konular