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;
}