Написание конструктора для игры в покер на Java - PullRequest
0 голосов
/ 14 апреля 2011

уже существует класс Card.java с 52 картами. И в Deck.java я должен написать конструктор для инициализации 52 карт подряд с набором и значением. я написал следующий код, но он не прошел публичный тест .. Кто-нибудь может мне помочь?

public class Deck {
    private Card[] cards;
    private final int DECK_SIZE=52;

    public Deck(){
        this.cards=new Card[DECK_SIZE];
        int index = 0;
        for (int suit = 0; suit <= 3; suit++) {
            for (int value = 1; value <= 13; value++) {
                this.cards[index] = new Card (suit, value);
                index++;
            }
        }
    }
    public Deck(Deck other) {
        this.cards= new Card[DECK_SIZE];
        for(int i=1;i<=DECK_SIZE;i++){
            this.cards[i]= other.cards[i];
}

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

Во втором конструкторе вы выполняете итерацию от 1 до DECK_SIZE (1..52), но вы должны выполнять итерацию, начиная с 0:

    for(int i=0; i<DECK_SIZE;i++){
        this.cards[i]= other.cards[i];
    }

Ваш код должен выдать ArrayIndexOutOfBoundsException.

0 голосов
/ 14 апреля 2011

В руководствах по Java есть хороший пример того, как создать колоду, используя значения Enum: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html

Обычный способ сделать массивы в Java - это for (int i = 0; i < XXX; i++). Тогда вы должны изменить свой цикл костюма на <4, а не <=3, а внешний вид вашей колоды во втором конструкторе будет for (int i = 0; i < DECK_SIZE; i++). Массивы длины n начинаются с индекса 0 и заканчиваются индексом n-1.

Может ли в колоде менее 52 карт? В этом случае ваш второй конструктор может выдать какое-то исключение; как есть, это даст ArrayIndexOutOfBoundsException.

0 голосов
/ 14 апреля 2011

Ваш цикл,

for(int i=1;i<=DECK_SIZE;i++){

неверно, должно читаться

for(int i=0;i <DECK_SIZE;i++){

Массив размером 52 имеет индексы только от 0 до 51.

...