我正在尝试为我正在制作的游戏创建一个高分屏幕。我希望展示之前球员的前十名以及刚刚完成比赛的球员得分(排名在高分榜中)。如果得分相同,这个高分榜将根据他们的分数进行分类,然后是他们的分数。我已尝试ArrayLists
和TreeSets
来执行此操作。我可以通过相应的方式对这两个数据进行排序,但是在为刚刚完成播放的玩家提取特定信息时遇到了麻烦。
我查看了地图,但似乎它们无法按照我希望对数据进行排序的方式工作。有人可以指导我解决这个问题吗?
这是我为其中一个做的一个小划痕程序:
public class Tree_set_test {
public static void main(String[] args) throws IOException {
String sName;
int nAge, nNum, i=0;
SortedSet<CFriend> tsFriends = new TreeSet<CFriend>();
sName = "Jason";
nAge = 5000;
nNum = tsFriends.size() + 1;
CFriend c1= new CFriend(sName,nAge,nNum);
tsFriends.add(new CFriend(sName,nAge,nNum));
sName = "Kenny";
nAge = 200;
nNum = tsFriends.size() + 1;
CFriend c2= new CFriend(sName,nAge,nNum);
tsFriends.add(new CFriend(sName,nAge,nNum));
sName = "Smile";
nAge = 100;
nNum = tsFriends.size() + 1;
tsFriends.add(new CFriend(sName,nAge,nNum));
sName = "Hossein";
nAge = 200;
nNum = tsFriends.size() + 1;
tsFriends.add(new CFriend(sName, nAge,nNum));
sName = "People";
nAge = 200;
nNum = tsFriends.size() + 1;
tsFriends.add(new CFriend(sName, nAge,nNum));
Iterator itFriends = tsFriends.iterator(); // see note below on iterators.
while (itFriends.hasNext()) {
i++;
System.out.println(itFriends.next());
}
}
}
class CFriend implements Comparable<CFriend> {
String sName;
int nScore, nNum;
CFriend(String _sName, int _nAge, int _nNum) {// constructor to load vars
sName = _sName;
nScore = _nAge;
nNum=_nNum;
}
public int compareTo(CFriend other) {
if (nScore > other.nScore) {
return -1;
}
else if (nScore < other.nScore) {
return 1;
}
else {
if (sName.compareTo(other.sName) < 0) {
return -1;
}
else if (sName.compareTo(other.sName) > 0) {
return 1;
}
else {
return 0;
}
}
}
public String toString() {
return sName + " " + String.valueOf(nScore);
}
}
我想查看c1
中c2
和TreeSet
的位置,并与name
和age
一起显示。
答案 0 :(得分:0)
您可以创建一个名称和分数的Player类。然后让它实现Comparable
接口。请参阅:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html
您可以将Player对象保存在ArrayList中,并使用Collections.Sort(yourArrayList);
您的播放器类看起来像这样:
public class Player implements Comparable<Player>{
int score;
String name;
@Override
public int compareTo(Player o) {
//compare here
}
}