2017-06-17 50 views
-2

我試圖寫一個小紙牌遊戲,並已成爲卡住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

用比較器對對象卡進行排序。 –

回答

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。

0

你不能對你創建的類型的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