|的Java |黑桃游戏打印声明的意外输出

时间:2015-08-30 04:50:06

标签: java

最近,我试图在java中创建一个黑桃游戏。我设法制作卡片和甲板课程,但每当我尝试打印出一张随机卡片或一副卡片,没有2个钻石和俱乐部时,我就会有意想不到的结果。这是我的代码:

主要课程

findViewById

卡类:

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;
    }
}

你可以让我知道我需要做什么才能在控制台上打印我的卡座和卡片吗?

3 个答案:

答案 0 :(得分:0)

您正在尝试直接打印对象。默认情况下,print方法调用的toString()方法会将引用打印到对象中。所以你得到的奇怪的东西实际上是存储对象的内存位置的代码。如果要打印其他内容(例如类的某些属性),则必须覆盖对象类中的toString()方法。

答案 1 :(得分:0)

您需要在类中实现/覆盖toString方法。你会在网上找到许多如何做到这一点的例子。对于Card类,简单版本可能如下所示:

@Override
public String toString()
{
    return "Card[suit=" + suits[suit] + ",value=" + values[value] + "]";
}

答案 2 :(得分:0)

您需要在类中实现toString或调用返回字符串表示形式的特定方法。目前当你执行System.out.println(card)时,它会打印卡片的实例toString,但由于你没有自己实现它,它会使用实现它的父类 - Object。由于Object没有关于您的特定对象的信息,因此它会输出通用名称和引用位置地址字符串。

如果您选择实施toString,您所要做的就是将方法添加到您的课程中,例如在Card课程中:

@Override
public String toString() {
    return value + " " + suit;
}

同样适合你的Deck课程(不知道你想在那里打印什么)。 <{1}}课程保持不变。