我不知道为什么我得到这个输出。当我尝试为我的扑克计划打印一手牌时。我知道我可以使用很多东西来使它像枚举一样更高效。但这是一个课程所以我受限于我可以使用的。我从未在我的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);
}
}
答案 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();