Пример перечисления карты класса Java. REVISED - PullRequest
1 голос
/ 28 января 2010

* Любая помощь очень ценится *

Я использую пример карты класса с веб-сайта Java, чтобы попытаться создать игру.

http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html

Я хочу присвоить значения мастей и рангов. Я не уверен, как это сделать ..

Для костюма я хочу назначить Heart = 4 бриллиант = 3, клуб = 2, лопата = 1

за ранг, туз = 11 Джек, королева, король = 10
2-10 стоимость карты ..

программа принимает пользовательский ввод в качестве аргументов для количества раздач и количества карточек на раздачу. как это: $ java Deal 4 5

тогда я хочу напечатать Восемь пик (8), десять сердец (40)

на основании значений .. пример spade = 1 * 8 сердца = 4 * 10

Я могу заставить его напечатать руку, а не значения ...

Пример моего Токовый выход уменьшен:

FIVE of CLUBS(0),
DEUCE of SPADES(0),
SEVEN of SPADES(0),
TEN of SPADES(0),
THREE of HEARTS(0),
FOUR of SPADES(0),
THREE of DIAMONDS(0),
[TEN of SPADES, THREE of HEARTS, FOUR of SPADES, THREE of DIAMONDS]
[FOUR of CLUBS, FIVE of CLUBS, DEUCE of SPADES, SEVEN of SPADES]
[QUEEN of HEARTS, SIX of HEARTS, FOUR of HEARTS, KING of DIAMONDS]

C:\Java\a02>

Вот код для программы в двух разных классах

import java.util.*;

public class Cards {

    public enum Rank {
        DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(
                9), TEN(10), JACK(10), QUEEN(10), KING(10), ACE(11);

        private int Rankpoints;

        Rank(int points) {
            this.Rankpoints = points;
        }

        public int getRankpoints() {
            return this.Rankpoints;
        }

    }

    public enum Suit {
        CLUBS(2), DIAMONDS(3), HEARTS(4), SPADES(1);

        private int Suitpoints;

        Suit(int points) {

            this.Suitpoints = points;

        }

        public int getSuitpoints() {
            return this.Suitpoints;
        }

    }

    private final Rank rank;
    private final Suit suit;

    private Cards(Rank rank, Suit suit) {
        this.rank = rank;
        this.suit = suit;
    }

    public Rank rank() {
        return this.rank;
    }

    public Suit suit() {

        return this.suit;

    }

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

    private static final List<Cards> protoDeck = new ArrayList<Cards>();

    // Initialize prototype deck
    static {
        for (Suit suit : Suit.values())
            for (Rank rank : Rank.values())
                protoDeck.add(new Cards(rank, suit));

    }

    public static ArrayList<Cards> newDeck() {

        return new ArrayList<Cards>(protoDeck); // Return copy of prototype deck
    }

}

а вот и главный

import java.util.*;

public class Deal {
    public static void main(String args[]) {
        int numHands = Integer.parseInt(args[0]);
        int cardsPerHand = Integer.parseInt(args[1]);
        List<Cards> deck = Cards.newDeck();
        Collections.shuffle(deck);

        for (Cards card : deck) {
            System.out.println(card.rank() + " of " + card.suit() + "("
                    + card.getSuitpoints() + ")" + ",");

        }

        for (int i = 0; i < numHands; i++)
            System.out.println(deal(deck, cardsPerHand));
    }

    public static ArrayList<Cards> deal(List<Cards> deck, int n) {
        int deckSize = deck.size();
        List<Cards> handView = deck.subList(deckSize - n, deckSize);
        ArrayList<Cards> hand = new ArrayList<Cards>(handView);
        handView.clear();
        return hand;
    }
}

когда я пытаюсь скомпилировать, я получаю ошибку .. для

card.getSuitpoints ()

ошибка: не удается найти символ: метод getSuitpoints ()

я нахожу это странным, потому что

card.getRankpoints () компилирует .. это то, как я помещаю это в перечисление?

getRankpoints () возвращает ноль. что не так?

1 Ответ

3 голосов
/ 28 января 2010

Причина, по которой вы видите дубликаты в своей колоде, заключается в том, что вы дважды перебираете карты.

for (Cards suit : deck) // ********* here is where i print the deck ********
{
    for (Cards rank : deck) {
        System.out.println(rank.rank() + " of " + suit.suit() + ",");
    }
}

Предполагая, что ваш генератор колоды работает, достаточно будет выполнить итерацию один раз:

for (Cards card : deck)
{ 
    System.out.println(card.rank() + " of " +  card.suit() + ",");  
} 

Кроме того, Card может быть лучшим выбором имени, чем Cards для класса, представляющего карту.

Чтобы получить значение, вам нужно добавить метод, который его возвращает.

Rank(int points)
{
    this.Rankpoints = points;  
}

public int getRankpoints() {
    return this.Rankpoints;
}

Тогда вы можете вызвать это, когда хотите напечатать значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...