Java ArrayList排序锦标赛排名

Java ArrayList排序锦标赛排名,java,sorting,arraylist,collections,Java,Sorting,Arraylist,Collections,好吧,我一辈子都搞不懂如何按照锦标赛排名对我的数据进行排序。这是我的密码 if(o==5){ 双RD,t,old,x; 弦乐比赛,选手; int a,玩家数量,地点; 地点=0; ArrayList players=新的ArrayList(); ArrayList placeVar=新的ArrayList(); 列表排序=新的ArrayList(); System.out.println(“1:添加比赛\t2:查看现有比赛”); a=keyIn.nextInt(); 如果(a==1){ Syst

好吧,我一辈子都搞不懂如何按照锦标赛排名对我的数据进行排序。这是我的密码

if(o==5){
双RD,t,old,x;
弦乐比赛,选手;
int a,玩家数量,地点;
地点=0;
ArrayList players=新的ArrayList();
ArrayList placeVar=新的ArrayList();
列表排序=新的ArrayList();
System.out.println(“1:添加比赛\t2:查看现有比赛”);
a=keyIn.nextInt();
如果(a==1){
System.out.println(“\n输入比赛名称”);
锦标赛=键入.next();
System.out.println(“\n输入玩家数量”);
玩家数量=keyIn.nextInt();
System.out.println(“输入玩家”);
对于(int i=0;i<玩家数量;i++){
字符串名称=keyIn.next();
播放器plr=新播放器();
plr.setName(名称);
玩家。添加(plr);
}
System.out.println(“\n输入位置”);
System.out.println(播放器);
对于(int i=0;i
这是我的PublicPlaceDisplay类文件

public类placeDisplay实现可比较{
私人场所;
公共无效设置位置(int nPlace){
地点=n空间;
}
公共int getPlace(){
返回地点;
}
@凌驾
公共字符串toString(){
返回整数.toString(位置);
}
@凌驾
公共整数比较(placeDisplay placeDisplay){
如果(位置>位置)
返回1;
else if(places==places)
返回0;
其他的
返回-1;
}
}
这是公共类文件

 public class player {

private String name;

public void setName(String pName)
{
    name = pName;
}

public String getName()
{

    return name;
}

@Override
public String toString() {
    return name;
}
}

这是我对这部分程序的结果。希望你们能帮我解决这个问题

1:添加锦标赛2:查看现有比赛
1.
输入比赛名称
锦标赛1
输入玩家数量
3.
输入玩家
上下快速移动
俏皮话
约翰
输入位置
[鲍勃、萨利、约翰]
上下快速移动
2.
俏皮话
1.
约翰
3.
地点如下:
2:鲍勃
1:莎莉
3:约翰
返回主菜单?(是/否)

您的
比较不正确,因为您正在比较相同的变量。
将其更改为:

甚至简单地说:

@Override
public int compareTo(placeDisplay placeDisplay){
    return places - placeDisplay.getPlace();
}

我还建议您改写
equals
方法,使其与可比接口文档中建议的
compareTo
一致:“当且仅当e1.compareTo(e2)==0与e1.equals(e2)具有相同的布尔值时,C类的自然顺序才与equals一致对于类C的每个e1和e2。请注意,null不是任何类的实例,即使e.equals(null)返回false,e.compareTo(null)也应引发NullPointerException。”。

需要修改比较器方法

public int compareTo(placeDisplay placeDisplay){
        if (places > placeDisplay.places)
            return 1;
        else if (places == placeDisplay.places)
            return 0;
        else 
            return -1;
    }

不是一个片段*facepalm*很抱歉,我几个小时前才加入这个网站,对它的工作原理不太了解。我无法获得我想要的结果屏幕,所以我只是将其复制到代码片段中,认为这无关紧要。我尝试了这两种建议。第一个不适用于.getPlace();不幸的是,第二个也是更简单的选择也得到了同样的结果:还有什么想法吗?也许是我的收藏。排序(排序);放错地方了吗?不知怎的,我得到了相同的结果:/n还有其他想法吗?@KevinLewis请求你发布完整的代码、玩家类、主方法代码。主方法很长,但我为你添加了玩家类@ankur-singhal@KevinLewis刚刚理解了你的代码,似乎是错的。你正在做“收集。排序(sort);”但是您没有在
排序中添加任何内容,而且您的
播放器
placeDisplay
都是独立的实体/pojo,您维护两个独立的列表,一个可以根据排名排序,并且您在两个列表上循环使用相同的索引。就是这样!非常感谢。我只需要将代码更改为Collections.sort(placeDisplay);
public int compareTo(placeDisplay placeDisplay){
        if (places > placeDisplay.places)
            return 1;
        else if (places == placeDisplay.places)
            return 0;
        else 
            return -1;
    }