所以我创建了一个简单的程序,要求用户输入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[]
的内容按降序排序。任何提示将不胜感激。
答案 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方法 并且覆盖了可比较界面的方法
我想它会比较所以在这种方法中比较得分并且它会排序......