Почему я получаю этот странный вывод Hand@2802cf63?

Я не уверен, почему я получаю этот вывод. когда я пытаюсь напечатать карточную комбинацию для своей покерной программы. Я знаю, что я могу использовать множество вещей, чтобы сделать это более эффективным, например, перечисления. но это для класса, поэтому я ограничен тем, что я могу использовать. Я никогда не работал с Collections.Suffle в моем классе Deck, так что я не уверен, что сделал все правильно. То же самое с переопределением в моем классе карты.

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

Карта:

public class Card 
{


    String suits;
    String values;

    public Card(int suit, int value)
    {
        if (suit == 0)
        {
            suits = "Spades";
        }
        else if (suit == 1)
        {
            suits = "Clubs";
        }
        else if (suit == 2)
        {
            suits = "Hearts";
        }
        else 
        {
            suits = "Diamonds";
        }

        if (value == 0)
        {
            values = "2";
        }
        else if (value == 1)
        {
            values = "3";
        }
        else if (value == 2)
        {
            values = "4";
        }
        else if (value == 3)
        {
            values = "5";
        }
        else if (value == 4)
        {
            values = "6";
        }
        else if (value == 5)
        {
            values = "7";
        }
        else if (value == 6)
        {
            values = "8";
        }
        else if (value == 7)
        {
            values = "9";
        }
        else if (value == 8)
        {
            values = "10";
        }
        else if (value == 9)
        {
            values = "Jack";
        }
        else if (value == 10)
        {
            values = "Queen";
        }
        else if (value == 11)
        {
            values = "King";
        }
        else
        {
            values = "Ace";
        }
    }
    @Override
    public String toString()
    {
        return values + " of " + suits;
    }

}

Колода:

import java.util.Arrays;
import java.util.Collections;
public class Deck 
{
    Card[] deck = new Card[52];

    public Deck()
    {
        int element;
        for(int iSuit = 0; iSuit < 4; iSuit++)
        {
            for(int iValue = 0; iValue < 13; iValue++)
            {
                element = iSuit * 13 + iValue;
                deck[element] = new Card(iSuit, iValue);
            }
        }
    }

    public void shuffle()
    {
        Card[] newDeck = new Card[52];
        int element = (int) (Math.random()*52);

        Collections.shuffle(Arrays.asList(deck[element]));

    public Card dealCard(int card)
    {
        return deck[card];
    }
}

Рука:

public class Hand 
{
    Card[] hand = new Card[5];

    public Hand(Deck deck)
    {
       int element;
       for(int card = 0; card < 4; card++)
        {
            hand[card]=deck.dealCard(card);
        }
    }
}

Главный:

public class FiveCardPoker 
{

    public static void main(String[] args)
    {

        Deck timsDeck = new Deck();

        timsDeck.shuffle();

        Hand timsHand = new Hand(timsDeck);

        System.out.println(timsHand);


    }

}

5 ответов

Решение

Hand не переопределяет метод toString объекта. Таким образом, вы получаете стандартный метод toString. Переопределите метод toString чем-то вроде этого:

public String toString() {
  StringBuffer sb = new StringBuffer();
   for(int card = 0; card < 4; card++)
        {
            sb.append(hand[card]+",")
        }
  return sb.toString()
}

Так как ты не переопределил toString() он берет реализацию из класса Object, который является неявным суперклассом всех классов.

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Выход не случайный.. это: ClassName.ItsHashCode;, Вы должны переопределить toString() за Hand Класс и показать его содержимое / сообщение (я).

Override toString() метод в классе Hand это уберет вашу ошибку. вернуть значение String из toString() метод т.е. что вы хотите напечатать, когда печатается объект Hand Class.

Так как ты не переопределил toString() в Hand он использует реализацию по умолчанию от Object
ссылка: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

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

Вы можете переопределить toString() в Hand лайк:

        @Override
        public String toString() {
            //format according to your requirements
            return Arrays.asList(hand).toString();
        }

или создать отдельный метод в классе Hand показать карты:

    public void printCards() {
        //format according to your requirements
        System.out.println(Arrays.asList(hand));
    }

и использовать его в своем основном как:

timsHand.printCards();
Другие вопросы по тегам