我正在嘗試爲我正在製作的遊戲創建高分屏幕。我希望顯示前十名球員的成績以及剛剛完成比賽的球員的得分(排名榜)。這個高分榜將按照他們的分數排序,如果分數相同,則他們將排序。我試過ArrayLists
和TreeSets
來做到這一點。我能夠將這兩種方法相應地對數據進行排序,但無法爲剛剛結束播放的玩家提供特定信息。用Java創建高分屏幕
我看過地圖,但似乎他們不會用我希望排序數據的方式工作。有人可以指導我解決這個問題嗎?
這裏有一個小耐刮劃我對他們的一種製成:
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
一起。
就像一個非常小提示:如果你去使用ArrayList,您可以使用['indexOf'](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html#indexOf%28java.lang.Object% 29)方法來獲取集合中特定對象的索引。你需要確保你的類實現了'equals'方法。 –