Печать массивов с объектами в Java

Сначала я сделал копию колоды карт. Затем я попытался использовать метод, который я создал, чтобы напечатать только первые семь карт этой колоды копий (что мне нужно сделать 2 раза). nextCard - это счетчик для отслеживания того, где мы находимся в колоде.

Вот мой класс: Палуба публичного класса

{
    private Card[] deck;
    private int nextCard;   


    public Deck(){
        deck = new Card[53];

        nextCard = 0;

        for(int i = 0; i < 52; i++){
            deck[i] = new Card(i);
            nextCard++;                 
        }

    }//Deck 

    public Deck(Deck existingDeck){//copy

        this.deck = new Card[52];

        for(int i=0; i < 52; i++){
            this.deck[i] = new Card(existingDeck.deck[i]);

        }
        nextCard++;
    }

    public void shuffle(){

        Card crdTemp = new Card();
        Random random = new Random();
        int num;
        nextCard = 0;

        for(int i = 0; i < 52; i++){
            num = random.nextInt (51);
            crdTemp = deck[i];
            deck[i] = deck[num];
            deck[num] = crdTemp;

            nextCard++;
        }
    }

    public Card dealACard(){
        Card crd = null;
        if(nextCard > -1){
        crd = deck[nextCard];
        nextCard--;
        }
        return crd;
    }

    public String dealAHand(int handSize){
        Card crd = null;
        String cards = "";
        for(int i = 0; i < handSize; i++){
            crd = dealACard();
            cards += crd.toString();
            //cards += dealACard().toString();
        }
        return cards;
    }

    public String toString(){

        String info = "";
        for(int i = 0; i < 52; i++){
            deck[i].toString ( );
            info += deck[i];
            nextCard++;
        }
        return info;
    }

}

Затем в моем драйвере:

Deck bDeck = new Deck(aDeck);
        bDeck.toString();
        String[] sevenCards = new String[bDeck];

        for(int i = 0; i < 7; i++){
            System.out.println ("Copy deck: ");
            sevenCards[i] = bDeck.toString();

        }

        for(int i = 0; i < 7; i++){
            System.out.println (sevenCards[i]);
        }


    }

Я предполагаю, что назначаю весь bDeck каждому элементу массива sevenCards, но я не знаю, как сделать это по-другому. Я также предполагаю, что есть способ сделать это, не пытаясь создать новый массив, подобный этому, но опять же, я реализовал много разных идей, и ничего не получилось. Был бы очень признателен за направление, спасибо.

1 ответ

Если я вас правильно понимаю, вы хотите напечатать только первые семь карт своей колоды? Таким образом, вы должны получить доступ к колодам карт, чтобы сделать это:

    Deck bDeck = new Deck(aDeck);
    bDeck.toString();
    String[] sevenCards = new String[7];

    for(int i = 0; i < 7; i++){
        System.out.println ("Copy deck: ");
        sevenCards[i] = bDeck.deck[i];

    }

    for(int i = 0; i < 7; i++){
        System.out.println (sevenCards[i]);
    }


}

Это будет работать, если Deck.deck доступен в вашем цикле for, и вы правильно реализовали toString() метод вашего Card учебный класс.

РЕДАКТИРОВАТЬ: Вот последние изменения dealACard():

public Card dealACard(){
    Card crd = null;
    if(nextCard > 0) { 
      nextCard--;
      crd = deck[nextCard];
    }

    return crd;
}
Другие вопросы по тегам