1

所以我创建了一个简单的程序,要求用户输入 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 中使用一些函数来完成它,或者我是否必须通过使用临时变量、if 语句等手动完成它。我想我也可以使用相当容易实现的冒泡排序算法。所以我想对内容进行score[]降序排序。任何提示将不胜感激。

4

3 回答 3

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);
    }
});
于 2013-07-02T17:03:59.050 回答
0

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

javadoc

种类

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

排序算法是经过修改的合并排序(如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。该算法提供有保证的 n*log(n) 性能。

于 2013-07-02T17:03:22.120 回答
0

我建议对您的代码进行一些更改,如下所示

步骤1。

使用以下内容制作一个名为 Genre 的 bean

字符串名称 int 分数

现在在你的主类中创建一个 ArrayList

现在将流派添加为对象

第2步。

现在让您的 bean 实现可比较接口并在 main.class 中创建的对象上使用 sort 方法,并覆盖可比较接口的方法

我想这将是 compareTo 所以在 tht 方法中比较分数并对其进行排序......

于 2013-07-02T17:12:40.550 回答