最近,我尝试在java中创建一个黑桃游戏。我已经成功地制作了卡片和牌类,但是每当我试图打印出一张随机卡片或一副牌,没有2颗钻石和球杆,我就会有一个意想不到的结果。这是我的代码:
主班
package com.star.spades;
import com.star.cards.Card;
import com.star.cards.Deck;
public class Spades {
public static void main(String[] args) {
Deck deck = new Deck();
Card randCard = deck.drawCard();
System.out.println(deck);
System.out.println(randCard);
}
}卡类:
package com.star.cards;
public class Card
{
private int suit;
private int value;
private String [] suits = {"Diamonds", "Clubs", "Spades", "Hearts", };
private String [] values = {"Ace", "2", "3", "4", "5", "6", "7", "8",
"9", "10", "Jack", "Queen", "King"};
private String [] joker = {"Joker"};
private String [] jokerValue = {"Little", "Big"};
public Card(int suit, int value)
{
this.suit = suit;
this.value = value;
}
public String outputCard()
{
return value + "of" + suit;
}
public String outputJoker()
{
return value + " " + suit;
}甲板级:
package com.star.cards;
import java.util.ArrayList;
import java.util.Random;
public class Deck {
private int numberOfSuits = 4;
private int numberOfValues = 52;
private int jokers = 1;
private int jokerSize = 2;
private ArrayList<Card> deck;
private ArrayList <Card> hands;
public Deck()
{
deck = new ArrayList<Card>();
for(int i = 0; i < numberOfSuits; i++)
for(int j =0; j < numberOfValues; j++)
{
deck.add(new Card(i, j));
}
for(int i = 0; i < jokerSize; i++)
for(int j = 0; j < jokers; j++)
{
deck.add(new Card(i, j));
}
deck.remove(1);
deck.remove(13);
}
//draws random card and removes it from deck.
public Card drawCard()
{
Random rand = new Random();
int index = rand.nextInt(deck.size());
return deck.remove(index);
}
//deals 13 random cards to the player
public ArrayList<Card> dealCards()
{
for(int i = 0; i < 13; i++)
{
hands.add(drawCard());
}
return hands;
}
}其结果是:
com.star.cards.Deck@143b9a5f
com.star.cards.Card@5513dd59你能告诉我我需要做些什么才能在控制台上打印出我的牌牌吗?
发布于 2015-08-30 04:53:53
您正在尝试直接打印对象。默认情况下,由print调用的toString()方法将打印出对对象的引用。因此,您得到的奇怪的东西实际上是存储对象的内存中位置的代码。如果要打印其他内容(例如,类的一些属性),则必须重写对象类中的toString()方法。
发布于 2015-08-30 04:55:35
您需要在类中实现/重写toString方法。你会在网上找到很多如何做到这一点的例子。对于您的Card类,一个简单的版本可能如下所示:
@Override
public String toString()
{
return "Card[suit=" + suits[suit] + ",value=" + values[value] + "]";
}发布于 2015-08-30 04:59:07
您需要在类中实现toString,或者调用返回字符串表示的特定方法。目前,当您执行System.out.println(card)时,它会打印卡片的实例toString,但是由于您没有自己实现它,所以它使用了实现它的父类- Object。因为Object没有关于特定对象的信息,所以它会打印一个泛型名称和引用位置地址字符串。
如果选择实现toString,只需将方法添加到类中,例如在Card类中:
@Override
public String toString() {
return value + " " + suit;
}Deck类也是如此(不确定要在那里打印什么)。您的Spades类保持不变。
https://stackoverflow.com/questions/32293265
复制相似问题