2013-07-02 72 views
1

所以我創建了一個簡單的程序,要求用戶輸入5個類型,然後從10中得分。我沒有添加任何驗證,但我並不擔心這一點。如您所見,我有兩個陣列:genres[]score[]。比方說,他們進入:Java:如何以降序排列數組?

 [1] : Genre A | 3 
     [2] : Genre B | 6 
     [3] : Genre C | 2 
     [4] : Genre D | 10 
     [5] : Genre E | 8 

結果應列出流派d,E,B,A,C

這裏是我的整個代碼:

import java.util.Scanner; 

class OrigClass { 
    public static void main (String[] args){ 
     Scanner ScanObj = new Scanner(System.in); 
     int count; 
     String[] genres; 
     genres = new String[5]; 
     int[] score; 
     score = new int[5]; 
     for (count = 0; count < 5;count++){ 
      System.out.println("Enter A Genre: "); 
      genres[count] = ScanObj.nextLine(); 
      System.out.println("How much do you like it? "); 
      score[count] = ScanObj.nextInt(); 
      ScanObj.nextLine(); 
     } 

     for (count = 0; count < 5; count++){ 
      System.out.println(count+1 + ") " + genres[count] + " " + score[count] + "/10"); 

     } 
     ScanObj.close(); 
    } 
} 

有一個聰明的方法做它在Java中使用一些函數,或者我將不得不通過使用臨時varibales,if語句等手動執行它。我想我也可以使用氣泡排序算法,這將很容易實現。所以我想把score[]的內容按降序排列。任何提示將不勝感激。

+0

爲什麼數組而不是'Map'?有了Map,它會更容易;將'Set >'放入'List'並使用'Collections.sort()'與自定義的「比較器」一起使用。 – fge

回答

0

嘗試方法Arrays.sort(Object[]);

javadoc

排序

公共靜態無效排序(對象[] a)對指定的 對象數組按升序排列,根據其 元素的自然排序。陣列中的所有元素必須實現可比較的接口 接口。此外,數組中的所有元素必須相互可比(即,對於數組中的任何元素e1和e2,e1.compareTo(e2)不得拋出 ClassCastException)。這種類型的 保證是穩定的:相同的元素將不會被重新排序爲 排序結果。

排序算法是一個修改的合併排序(如果低位子列表中的最高元素小於高位子列表中的最低位元素,則合併爲 )。該算法提供有保證的 n * log(n)性能。

5

而不是有兩個平行的數組,創建一個流派/樂譜對象的數組。

class OrigClass { 
    class ScoredGenre { 
     public String genre; 
     public int score; 
    } 
    ScoredGenre[] data = new ScoredGenre[5]; 
    . . . 
} 

然後你可以定義一個比較器來比較對象的分數和相應的排序。

Arrays.sort(data, new Comparator<ScoredGenre>() { 
    public int compare(ScoredGenre a, ScoredGenre b) { 
     // Note that a and b are reversed to obtain a descending sort 
     return Integer.compare(b.score, a.score); 
    } 
}); 
0

我會建議一些發生在你的代碼 如下

第1步。

將名爲類型 與以後的事豆

字符串名稱 INT得分

現在在你的主類創建創建一個ArrayList

現在加上流派爲對象

第2步。

現在讓你的bean實現可比接口,並使用排序方法上in.the main.class 並取得了對象,並在此改變可比接口

我想這將是這樣的compareTo在THT的方法方法比較分數,它將排序...

+0

你幾乎正好說了Ted Hopp在10分鐘前所說的,除了他更清楚的解釋。 –

+0

你可以看到他的評論我忙於解答這個問題。 :-) – cafebabe1991

+0

夠公平的。發生了...... –