【问题标题】:JAVA ArrayList sort and remove pairsJAVA ArrayList 排序和删除对
【发布时间】:2017-06-17 01:41:05
【问题描述】:

我正在尝试写一个小纸牌游戏,结果卡住了

我创建了一个 Deck 类,并在其中创建了一个对象数组列表,每个对象代表一个由字符串套装、字符串名称和 2-14 的 int 值组成的扑克牌中的一张牌。 我为 Game 创建了另一个类,其中包含 2 个额外的数组列表 player1 和 player2,然后将卡片从数组列表牌组“发”给每个玩家。 在继续玩游戏之前,我需要从 player1 和 player2 数组列表中删除所有对。

我一直在尝试通过我的 getValue() 方法对 arraylist 进行排序,然后使用 player1.getValue(i).equals(player1.getValue(i+1) 遍历 arraylist,然后 remove(i) 两次

    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 行未定义。有什么建议可以使这项工作有效吗?我只是在学习arraylists

【问题讨论】:

  • 要让Collections.sort 工作,Card 需要implement Comparable&lt;Card&gt;。能否请您展示您的Card 课程?
  • 你打电话给getFaceValue,而不是你在描述中所说的getValue。这是故意的吗?
  • 使用比较器对对象卡片进行排序。
  • 我还有一个甲板课
  • 是的,很抱歉这是 getFaceValue 而不是 getValue

标签: java sorting object arraylist


【解决方案1】:

虽然 Camparable 对您有用,但您还有另一个选项可以使用 Comparator。对于您的问题,以下代码可以正常工作。

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。

【讨论】:

    【解决方案2】:

    您不能在您创建的类型的 ArrayList 上调用 sort,排序算法应该如何知道是什么让一张卡片比另一张卡片更大/更小?让您的 Card 类实现 Comparable,以便排序工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 2010-12-03
      • 2016-08-22
      • 1970-01-01
      • 2015-08-05
      • 2017-08-02
      相关资源
      最近更新 更多