我一直在尝试这样做一段时间,但我做不到。
如何将默认升序更改为降序?另外,还有其他简单的方法可以对数组进行排序吗?
HighScore[] highscorelist = new HighScore[10]; // An array of 10
void setup() {
size(800, 600);
// score.txt is:
//10 -
//0 -
//0 -
//3 b
String rows[] = loadStrings("scores.txt");
for (int i = 0; i < highscorelist.length; i ++ ) { // Initialize
String[] pieces = split(rows[i], TAB);
highscorelist[i] = new HighScore(parseInt(pieces[0]), pieces[1]);
}
Arrays.sort(highscorelist, new SortHighScore());
}
void draw() {
fill(0);
textSize(18);
text("High Scores", 360, 234);
text("Name", 300, 260);
text("Score", 460, 260);
int x = 320;
int y = 290;
//Arrays.sort(highscorelist, new SortHighScore("score"));
for (int i =0; i < 10; i++) {
highscorelist[i].display(x, y, 150);
y+=20;
}
}
class HighScore {
int score;
String name;
HighScore() {
}
HighScore(int tempscore, String tempname) {
score = tempscore;
name = tempname;
}
void display(int x, int y, int gapX) {
text(score, x+gapX, y);
text(name, x, y);
}
}
class SortHighScore extends HighScore implements Comparator {
SortHighScore() {
}
/*
method which tells how to order the two elements in the array.
it is invoked automatically when we call "Arrays.sort", and must be included in this class.
*/
int compare(Object object1, Object object2) {
// cast the objects to your specific object class to be sorted by
HighScore row1 = (HighScore) object1;
HighScore row2 = (HighScore) object2;
// necessary to cast to Integer type when comparing ints
Integer val1 = (Integer) row1.score;
Integer val2 = (Integer) row2.score;
// the "compareTo" method is part of the Comparable interface, and provides a means of fully ordering objects.
return val1.compareTo(val2);
}
}