Как и в моем предыдущем посте, я пытаюсь разработать карточную игру, в которой:
a) Распечатывает всю колоду карт
b) Добавляет 10 случайных карт в порядке возрастания список массивов
c) Подсчитывает количество пар в этом списке массивов
В классе SimpleCardGame2 есть 2 метода, с которыми у меня возникают проблемы которые относятся к частям b и c.
личное состояние c void addCard (карты ArrayList, карта c) - это метод, который добавляет Card c в cards.cards и карты должны быть расположены от маленького к большому. Когда новая карта вставлена, определите правильную позицию, чтобы список поддерживал отсортированный порядок. Я попытался использовать метод .ordinal () для сравнения элементов, но я получаю сообщение об ошибке: Поле Card.rank не отображается .
Далее private stati c int numPairs (карты ArrayList) - это метод, который подсчитывает количество пар карт в карточках . Две карты в паре, если они одного ранга. Три карты одинакового ранга в картах считаются одной парой. Есть две пары карт, если все четыре карты одного ранга находятся в картах. Мои проблемы здесь заключаются в том, что я не уверен, как считать 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.