Java:如何按降序排序数组?

时间:2013-07-02 17:01:27

标签: java arrays sorting

所以我创建了一个简单的程序,要求用户输入5种类型,然后从10中得分。我没有添加任何验证,但我并不担心。如您所见,我有两个数组:genres[]score[]。让我们说他们进入:

        [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[]的内容按降序排序。任何提示将不胜感激。

3 个答案:

答案 0 :(得分: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);
    }
});

答案 1 :(得分:0)

尝试方法Arrays.sort(Object[]);

来自javadoc

  

<强>排序

     

public static void sort(Object [] a)对指定的数组进行排序   对象按升序排列,按其自然顺序排列   元素。数组中的所有元素都必须实现Comparable   接口。此外,数组中的所有元素必须是相互的   可比的(即e1.compareTo(e2)一定不能抛出   对于数组中的任何元素e1和e2的ClassCastException。这种   保证稳定:相同的元素不会被重新排序为a   结果的结果。

     

排序算法是一个经过修改的mergesort(其中合并为   如果低子列表中的最高元素小于   高子列表中的最低元素)。该算法提供保证   n * log(n)表现。

答案 2 :(得分:0)

我建议您在代码中进行一些更改 如下

第1步。

创建一个名为Genre的bean 以下内容

字符串名称 int score

现在在主类中创建一个ArrayList

现在将类型添加为对象

步骤2。

现在让你的bean实现类似的接口,并对main.class中的对象使用sort方法 并且覆盖了可比较界面的方法

我想它会比较所以在这种方法中比较得分并且它会排序......