Как напечатать объекты, вложенные в массивы в Java - PullRequest
0 голосов
/ 06 марта 2011

Программа карточной игры, которую я создаю, должна запрашивать у пользователя количество игроков и количество карт в каждой руке, затем перетасовать колоду, затем сдавать карты, а затем отображать карты в каждой руке игрока.Он покажет руки для всех игроков, если в колоде недостаточно карт (мы не можем сдать 10 карт по 7 карт из колоды из 52 карт).

Я создал класс Card, класс Deck, класс Hand и драйвер для запуска программы.Поскольку это назначение, я должен придерживаться данных правил, и поэтому мне разрешено использовать только массивы, а не списки массивов.Моя проблема в том, что я не могу понять, как печатать объекты Card внутри объекта Hand, внутри массива Hands.Существует также, вероятно, гораздо лучший способ сделать это, но я ограничен тем, что мне разрешено импортировать / использовать.Могу ли я получить некоторую помощь о том, где искать объекты печати во вложенных массивах?Я не могу использовать свой метод, написанный в классе Hand, для добавления карт в Hands в массиве из-за отсутствия имени объекта.

РЕДАКТИРОВАТЬ: у меня есть конструктор в классе Hand, создающий руку размером с переданную ему int.Путаница заключается в том, что когда я узнаю, сколько игроков действительно играют в игру от пользователя, я создаю массив типа Hand в драйвере, который заполняется новыми объектами Hand с использованием цикла.В этот момент я понятия не имею, как ссылаться на каждый отдельный объект руки, чтобы я мог напечатать содержимое, используя toString ().У них, похоже, нет имени.

Код для следования:

import java.util.Arrays;
import java.util.Scanner;
public class CardsDriver {

public static void main(String[] args) 
{
    Card c1 = new Card();       //create new card object
    Scanner kb = new Scanner(System.in);
    int cards;
    int players;


    System.out.print("How many players are in the game?");
    players = Integer.parseInt(kb.nextLine());
    System.out.print("\nHow many cards will be dealt to each player?");
    cards = Integer.parseInt(kb.nextLine());

    while ((cards * players) > 52)
    {
        System.out.print("There are not enough cards in the deck to deal " +
                         players + " hands of " + cards + " cards. try again.");

        System.out.print("How many players are in the game?");
        players = Integer.parseInt(kb.nextLine());
        System.out.print("\nHow many cards will be dealt to each player?");
        cards = Integer.parseInt(kb.nextLine());
    }

    Deck readyDeck = new Deck();    //create new deck 
    readyDeck.shuffleDeck();        //shuffle the newly built deck using Java.Util.Random   
    Hand[] playerHands= new Hand[players];  //create another array to hold all player hands

    for(int index =0; index < playerHands.length; index++)
    {
        playerHands[index] = new Hand(cards);   //create hand object for each player of the size input by the player
        /*for (int index2 =0; index2<cards;index2++)
        {
            //fill each hand with cards using addcard somehow. i have no object name.
            Hand.addCard(readyDeck.dealACard());
        }*/
    }
}

Ответы [ 3 ]

2 голосов
/ 06 марта 2011

Если вы переопределили метод toString каждого из упомянутых классов, распечатка массивов должна быть такой же простой, как вызов метода Arrays.toString() (а не просто передача ссылки на массив в System.out.println() и его варианты.

Если вам интересно, как это обрабатывает вложенные массивы, метод toString() класса Deck будет включать вызов метода Arrays.toString для массива Card.

Пример:

class Card {

    int suit, rank;

    @Override
    public String toString() {
        // outputs something like ACE of SPADE
        return suitToName(suit) + " of " + rankToName(rank);
    }

}

class Deck {

    private Card[] cards;

    private String name;

    @Override
    public String toString() {
        // prints : MyDeck -> [ACE of SPADE, ACE of HEART] etc.
        return name + " -> " + Arrays.toString(cards);
    }

}

Кстати, я думаю, что вы должны перечислять для ранга и мастей, а не возиться с целыми числами. Это было бы намного чище, я должен сказать.

1 голос
/ 06 марта 2011

, как Санджай предложил вам добавить в класс карты:

@Override 
public String toString() {
...
}

Затем просто используйте cardinstance.toString() всякий раз, когда вы хотите напечатать объект вашей карты, где бы он ни находился.Я не знаю, что вы пытаетесь достичь, но вот хороший пример хорошего программирования на Java (для создания Texas Hold Em).

http://code.google.com/p/texasholdem-java/source/checkout

Изучите это, посмотрите, как этосделано правильно, и вы можете играть в любую карточную игру.

0 голосов
/ 06 марта 2011

Чтобы переопределить его, вы можете использовать новый мастер в более новых версиях Eclipse или использовать плагин, такой как JUtils ToString Generator , который я однажды написал.

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