为什么我得到这个奇怪的输出Hand @ 2802cf63?

时间:2014-07-18 07:01:45

标签: java arrays poker

我不知道为什么我得到这个输出。当我尝试为我的扑克计划打印一手牌时。我知道我可以使用很多东西来使它像枚举一样更高效。但这是一个课程所以我受限于我可以使用的。我从未在我的Deck课程中使用Collections.Shuffle,所以我不确定我做得对。与我的卡类中的覆盖相同。

有关如何让这个程序打印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 个答案:

答案 0 :(得分:2)

由于你没有覆盖toString(),它需要Object类的实现,它是所有类的隐式超类。

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

答案 1 :(得分:2)

Hand不会覆盖Object的toString方法。所以你得到了标准的toString方法。 用类似的东西覆盖toString方法:

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

答案 2 :(得分:1)

输出不是随机的..它是:ClassName.ItsHashCode;。您必须覆盖toString()类的Hand并显示其内容/消息。

答案 3 :(得分:0)

在Hand类中覆盖toString()方法,这将删除您的错误。 从toString()方法返回String值,即;打印Hand Class的对象时要打印的内容。

答案 4 :(得分:0)

由于您未在toString()中覆盖Hand,因此它使用Object的默认实施方式 参考:http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString%28%29

  

有关如何让这个程序打印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();