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

Java:如何按降序排列数组?,java,arrays,sorting,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中 以下是我的总体代

因此,我创建了一个简单的程序,要求用户输入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();
    }
}
import java.util.Scanner;
类或类{
公共静态void main(字符串[]args){
Scanner ScanObj=新扫描仪(System.in);
整数计数;
字符串[]类型;
类型=新字符串[5];
整数[]分;
分数=新整数[5];
用于(计数=0;计数<5;计数++){
System.out.println(“输入流派:”);
genres[count]=ScanObj.nextLine();
System.out.println(“您有多喜欢它?”);
score[count]=ScanObj.nextInt();
ScanObj.nextLine();
}
用于(计数=0;计数<5;计数++){
System.out.println(count+1+“”“+”类型[count]+“”+score[count]+”/10”);
}
ScanObj.close();
}
}

是否有一种聪明的方法可以在java中使用一些函数来实现它,或者我必须使用临时变量、if语句等手动实现它。我想我也可以使用气泡排序算法,这将非常容易实现。所以我想把
score[]
的内容按降序排序。任何提示都将不胜感激。

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

从:

排序

公共静态无效排序(对象[]a)对指定的 根据对象的自然顺序,将对象按升序排列 元素。数组中的所有元素都必须实现可比较的 界面此外,数组中的所有元素必须相互匹配 comparable(即e1。compareTo(e2)不能抛出 数组中任何元素e1和e2的ClassCastException)。这种 保证是稳定的:相等的元素不会作为 排序结果

排序算法是一种改进的mergesort(其中合并是 如果低位子列表中的最高元素小于 高个子列表中的最低元素)。该算法提供了有保证的性能 n*log(n)性能


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

从:

排序

公共静态无效排序(对象[]a)对指定的 根据对象的自然顺序,将对象按升序排列 元素。数组中的所有元素都必须实现可比较的 界面此外,数组中的所有元素必须相互匹配 comparable(即e1。compareTo(e2)不能抛出 数组中任何元素e1和e2的ClassCastException)。这种 保证是稳定的:相等的元素不会作为 排序结果

排序算法是一种改进的mergesort(其中合并是 如果低位子列表中的最高元素小于 高个子列表中的最低元素)。该算法提供了有保证的性能 n*log(n)性能


不要有两个平行数组,而是创建一个流派/乐谱对象数组

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);
    }
});
Arrays.sort(数据,新比较器(){
公共整数比较(ScoredGenre a、ScoredGenre b){
//请注意,a和b是反向的,以获得降序排序
返回整数。比较(b.score,a.score);
}
});

不要有两个平行数组,而是创建一个流派/乐谱对象数组

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);
    }
});
Arrays.sort(数据,新比较器(){
公共整数比较(ScoredGenre a、ScoredGenre b){
//请注意,a和b是反向的,以获得降序排序
返回整数。比较(b.score,a.score);
}
});

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

第一步

制作一个名为Genre的bean 用下面的东西

字符串名 整数分数

现在在主类中创建一个ArrayList

现在将类型添加为对象

第二步

现在让您的bean实现可比较的接口,并对在.main.class中生成的对象使用sort方法 并超越了可比界面的方法


我想它会被比较,所以在tht方法中比较分数,它会被排序…

我建议对代码进行一些修改 如下

第一步

制作一个名为Genre的bean 用下面的东西

字符串名 整数分数

现在在主类中创建一个ArrayList

现在将类型添加为对象

第二步

现在让您的bean实现可比较的接口,并对在.main.class中生成的对象使用sort方法 并超越了可比界面的方法


我猜它会比较,所以在tht方法中,比较分数,它会排序…

为什么是数组而不是映射?有了
地图
就容易多了;将
集合
放入
列表
中,并使用带有自定义
比较器的
集合.sort()
。为什么使用数组而不是
映射
?有了
地图
就容易多了;将
集合
放入
列表
中,并使用自定义的
比较器使用
Collections.sort()
。你几乎完全按照Ted Hopp在10分钟前说的话说了,只是他的解释更清楚。我在忙着回答问题时看到了他的评论。:-)你刚才说的几乎和泰德·霍普10分钟前说的一模一样,只是他的解释要清楚得多