当前位置: 首页 > 知识库问答 >
问题:

Java-如何以升序向数组列表添加元素并计算数组列表中的对数?

蒙化
2023-03-14

与我之前的帖子相似,我试图开发一个纸牌游戏:

a)打印出整副牌

接下来,私有静态int numPairs(ArrayList cards)是一个计算卡片中卡片对数量的方法。如果两张牌等级相同,则两张牌成对。牌中三张相同等级的牌计为1对。如果相同等级的四张牌都在牌中,则有2对牌。这里的问题是,我不确定如何用我编写的代码将3张等级相同的牌计数为1对,并且仍然会出现表示字段card.rank不可见的错误,因为我使用了。ordinal()方法来比较牌的等级。

我如何修复这些错误和我的代码为这两个特定的方法?

import java.util.ArrayList;

public class SimpleCardGame2 {
  private static void addCard(ArrayList<Card> cards, Card c) {
        for (int x=0; x<10; x++) {
            if (cards.get(x) < c.rank.ordinal()) {
                continue;
            }
            if (cards.get(x) == c.rank.ordinal()) {
                return;
            }
            cards.add(x,c);
            return;
        }
        cards.add(c);
   }

  private static int numPairs(ArrayList<Card> cards) {
        int count=0;
        for (int j=0; j<10; j++) {
            for (int k=j+1; k<10; k++) {
                if (cards.get(j).rank.ordinal() == cards.get(k).rank.ordinal()) {
                    count+=1;
                }
            }
        }
        return count;
   }

  public static void main(String[] args) {

    ArrayList<Card> deck;  // an arraylist of Cards, representing a deck of cards

    // put a copy of each card into cards
    // The order of the cards in the array is: 
    // S2, S3, ..., SK, H2, ..., HK, C2, ..., CK, D2, ..., DK

    deck = new ArrayList<Card>();
    for (Suit s : Suit.values()) {
        for (Rank r : Rank.values()) {
            deck.add(new Card(r,s));
        }
    }

    //
    // YOU DO NOT HAVE TO MODIFY ANYTHING BELOW
    //

    // print out the whole deck once
    System.out.println("The whole deck is:");
    System.out.println(deck);

    // randomly draw 10 cards
    // cards drawn will be removed from deck 
    MyRandom rnd = new MyRandom();
    ArrayList<Card> cards = new ArrayList<Card>();
    for (int i = 0; i < 10; i++)
      addCard(cards, deck.remove(rnd.nextInt(deck.size())-1));


    // print out the card drawn and the number of pairs
    System.out.print("The cards drawn are: ");
    System.out.println(cards);
    System.out.print("There are ");
    System.out.print(numPairs(cards));
    System.out.println(" pair(s) of cards.");
  }
}
public class Card {
    private Rank rank;
    private Suit suit;

    public Card (Rank rank, Suit suit) {
        this.rank = rank;
        this.suit = suit;
    }

    public String toString() {
        return suit + "" + rank;
    }

    public int compareTo(Card c) {
        int diffRank = rank.ordinal() - c.rank.ordinal();
        if (diffRank < 0) {
            return -1;
        }
        else if (diffRank > 0) {
            return 1;
        }
        else if (diffRank == 0) {
            int diffSuit = suit.ordinal() - c.suit.ordinal();
            if (diffSuit < 0) {
                return -1;
            }
            else if (diffSuit > 0) {
                return 1;
            } 
        }
        return 0;
    }
}

public enum Rank {
  TWO("2"), 
  THREE("3"), 
  FOUR("4"), 
  FIVE("5"), 
  SIX("6"), 
  SEVEN("7"), 
  EIGHT("8"),
  NINE("9"), 
  TEN("10"), 
  JACK("J"), 
  QUEEN("Q"), 
  KING("K"),
  ACE("A"); 

  private String rank;

  // Constructor
  Rank (String r) {
    rank = r;
  }

  public String toString() {
    return rank;
  }
}

public enum Suit {
    SPADE("S"), 
    HEART("H"), 
    CLUB("C"), 
    DIAMOND("D"); 

    private String suit;

    Suit (String s) {
      suit = s;
    }

    public String toString() {
      return suit;
    }
}
import java.util.Random;

public class MyRandom {

  Random rnd;

  public MyRandom() {
//    rnd = new Random(180);
    rnd = new Random();
  }

  // generate a random integer from 1 to max
  public int nextInt(int max) {
    return rnd.nextInt(max) + 1;
  }
}

以下是正确程序的假定输出:

The whole deck is:
[S2, S3, S4, S5, S6, S7, S8, S9, S10, SJ, SQ, SK, SA, H2, H3, H4, H5, H6, H7, H8, H9, H10, HJ, HQ, HK, HA, C2, C3, C4, C5, C6, C7, C8, C9, C10, CJ, CQ, CK, CA, D2, D3, D4, D5, D6, D7, D8, D9, D10, DJ, DQ, DK, DA]
The drawn cards are: [D4, D5, S9, C10, DQ, CQ, HQ, SQ, HK, SA]
There are 2 pair(s) of cards.

The whole deck is:
[S2, S3, S4, S5, S6, S7, S8, S9, S10, SJ, SQ, SK, SA, H2, H3, H4, H5, H6, H7, H8, H9, H10, HJ, HQ, HK, HA, C2, C3, C4, C5, C6, C7, C8, C9, C10, CJ, CQ, CK, CA, D2, D3, D4, D5, D6, D7, D8, D9, D10, DJ, DQ, DK, DA]
The drawn cards are: [D2, D5, H9, S9, H10, HJ, DK, HK, SK, CA]
There are 2 pair(s) of cards.

共有1个答案

通迪
2023-03-14

我将为每个序列创建一个ArrayList。然后遍历抽到的牌,并将每张牌复制到正确的秩ArrayList。然后您需要检查每个rank ArrayList的大小:如果大小为2或更大,则包含一对。计算大小为2或更大的ArrayList的数量,您就知道对的数量。

 类似资料:
  • 我想在Sokoban游戏中保存我的玩家角色的步骤。首先我想用字符的实际位置填充一个int x和y的数组,称为“pos”。然后我想将这个数组添加到数组的ArrayList中,称为“moves”。 一个玩家位置的阵列: ArrayList为所有步骤,玩家在关卡: 如果将“int[]”放在ArrayList的尖括号内,则会出错。 如何将阵列位置添加到ArrayList移动?

  • 我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!

  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 我已经创建了一个的数组: 我的问题是现在如何访问其中一个数组的元素。例如,我可以通过以下方式访问(或在示例打印中)整个数组元素: 但是如何访问所拥有的数组中的第一个元素呢?我尝试了所有方法,比如,但当数组是链接列表的元素时,我不知道如何访问数组中的元素。

  • 我试图将输入与arraylist中的值进行比较。 前任;我有一个arraylist: 数组的每个索引在我的程序中代表一个唯一的属性。e、 g索引0代表,索引1代表等。如果我做返回第二个数组。 我正在尝试将与每个数组中的第二个元素进行比较。所以假设我运行这个,我希望它遍历每个数组中的每个[1],如果该索引匹配,则返回true。 因此,我希望它将'number'(1102)与每个第一个索引元素进行比较

  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部