所以我目前正在为大学做一个有几个可选部分的练习(因为我们还没有在课堂上做过这个),其中一个是使用列表而不是数组(因此它的大小可变)另一个打印按点排序的列表(我现在就到了)
所以,我有一个看起来像这样的Player.java类。
public class Player {
String name;
String password;
int chips;
int points;
public Player (String n, String pw, int c, int p) {
name = n;
password = pw;
chips = c;
points = p;
}
public String getName () {
return name;
}
public void setName (String n) {
name = n;
}
public void setPW (String pw) {
password = pw;
}
public String getPW () {
return password;
}
public void setChips (int c) {
chips = c;
}
public int getChips () {
return chips;
}
public void setPoints (int p) {
points = p;
}
public int getPoints () {
return points;
}
}
非常简单,然后我用这个创建一个List(在另一个类中):
List<Player> lplayer = new ArrayList<Player>();
添加玩家:
lplayer.add(new Player(n,pw,c,p))`
最后用这个来阅读他们的统计数据:
public int search_Player (String n) {
String name;
int i = 0;
boolean found = false;
while ((i <= tp) && (!found)) {
name = lplayer.get(i).getName();
if (name.equals(n)) {
found = true;
}
i++;
}
return (found == true) ? i-1 : -1;
}
public Player show_Player (int i) {
return lplayer.get(i);
}
public void list_Players() {
Collections.sort(lplayer);
int i2;
if (tp > 0) { // variable which contains number of total players
for (int i = 0;i<tp;i++) {
i2 = i+1;
System.out.println ("\n"+i2+". "+lplayer.get(i).getName()+" [CHIPS: "+lplayer.get(i).getChips()+" - POINTS: "+lplayer.get(i).getPoints()+"]");
}
}
else {
System.out.println ("There are no players yet.");
}
}
所以这基本上都是代码。正如您所看到的,我已经有了list_Players函数,但它只是按照添加的顺序打印出来。我需要一种打印方式,按每个玩家的积分排序(基本上是排名)。
正如你所看到的,我对java很陌生,所以请尽量不要提出一个非常复杂的方法。
我已经搜索过它,发现像Collections.sort(列表)这样的东西,但我想这不是我需要的东西。
谢谢!
答案 0 :(得分:7)
您可以在public static <T> void sort(List<T> list, Comparator<? super T> c)
中使用Collections
重载 - 提供您需要的比较器(可以只是一个匿名类) - 并且您已经完成了设置!
修改强>: This描述了该方法的工作原理。简而言之,您将实现您的呼叫
Collections.sort(list, new Comparator<Player>() {
int compare(Player left, Player right) {
return left.getPoints() - right.getPoints(); // The order depends on the direction of sorting.
}
});
就是这样!
答案 1 :(得分:1)
Collections.sort(list)
绝对可以解决您的问题。这是一种对Java提供的集合进行排序的方法。如果你正在编写一个“真实世界”的应用程序(不是拼贴练习),那就是你这样做的方式。
要让Collections.sort(list)
正常工作,您必须实现一个接口调用Comparaple。通过实现此接口,排序将知道如何订购元素。
但是因为它是拼贴画的练习,这可能有点容易。如果您希望(或必须)实现自己的排序算法,请首先尝试对常用的数字列表进行排序(1,5,2,7 ...)。您可以轻松地为自己的类扩展这样的排序算法。
答案 2 :(得分:0)
一种使用 lambdas 的新方法,编写时间要短得多
myList.sort((obj1, obj2)->(condition)?1:-1);
您可以在哪里使用对象来满足您的条件,并且返回的任何大于 0 的值都表示交换(在这种情况下,如果条件返回 true)