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.getValue
private 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

+1

对于'Collections.sort'工作,'Card'需要'实现Comparable '。你可以请出示你的'卡'级吗? – 4castle

+0

您在描述中声明时调用'getFaceValue',而不是'getValue'。那是故意的吗? – forgivenson

+0

用比较器对对象卡进行排序。 –

虽然可运行适用于您,但您可以使用另一个选项来使用比较器。对于你的问题,下面的代码工作得很好。

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中?

+0

谢谢,我会试试这个 – calKooLator