Java:如何按降序排列数组?
因此,我创建了一个简单的程序,要求用户输入5种类型,然后从10种中打分。我没有添加任何验证,但我不担心这一点。如您所见,我有两个数组: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中 以下是我的总体代
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分钟前说的一模一样,只是他的解释要清楚得多