JAVA ArrayList的排序和删除对
我试图写一个小纸牌游戏,并已成为卡住JAVA ArrayList的排序和删除对
我创建了一个类甲板和其对象的ArrayList,每个对象表示播放甲板由1张卡一个字符串套件,字符串名称和一个2-14的int值。 我为另外一个游戏类别创建了2个额外的数组列表,玩家1和玩家2,然后将数组中的牌“处理”给每位玩家。 在我继续玩游戏之前,我需要从player1和player2 arraylist中删除所有对。 (i).equals(player1.getValue(i + 1)),然后删除(i)两次
(我已经尝试使用我的getValue()方法对arraylist进行排序,然后遍历arraylist使用player1.getValueprivate void removePlayer1Pairs(ArrayList<Card> player1) {
Collections.sort(player1);
int i = 0;
while(i < player1.size() - 1){
if(player1.getFaceValue(i).equals(player1.getFaceValue(i+1))){
player1.remove(i);
player1.remove(i);
i = Math.max(0, (i - 1));
}
else{
i++;
}
}
}//end removePlayer1Pairs
我收到错误的方法排序并不适用于第2行的ArrayList和的getValue()方法是未定义的第5行的任何建议,使这项工作?我刚学的ArrayList
虽然可运行适用于您,但您可以使用另一个选项来使用比较器。对于你的问题,下面的代码工作得很好。
Collections.sort(player1, new Comparator<Card>() {
@Override
public int compare(Card c1, Card c2) {
Integer a = c1.getFaceValue();
Integer b = c2.getFaceValue();
return a.compareTo(b); // for descending order use b.compareTo(a)
}
});
如果您想要同时对其他字段进行排序,如faceValue和suit,则必须使用Comparator。
你不能对你创建的类型的ArrayList调用排序,排序算法应该如何知道是什么使一张牌变大/变小?让你[R卡类实现可比,这样的排序可以工作:
public class Card implements Comparable<Card> {
@Override
public int compareTo(Card card) {
//compare card sizes here, i.e Card.value or whatever
}
现在,您可以将您的卡片进行排序:
Collections.sort(player1);
至于删除重复,ArrayList中可能添加到一个集合,它只能包含uniques,然后把它放回到ArrayList中?
谢谢,我会试试这个 – calKooLator
对于'Collections.sort'工作,'Card'需要'实现Comparable'。你可以请出示你的'卡'级吗? –
4castle
您在描述中声明时调用'getFaceValue',而不是'getValue'。那是故意的吗? – forgivenson
用比较器对对象卡进行排序。 –