首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >##^Java#^Java#^Java#.#^Java#^Java#.

##^Java#^Java#^Java#.#^Java#^Java#.
EN

Stack Overflow用户
提问于 2015-08-30 04:50:05
回答 3查看 149关注 0票数 0

最近,我尝试在java中创建一个黑桃游戏。我已经成功地制作了卡片和牌类,但是每当我试图打印出一张随机卡片或一副牌,没有2颗钻石和球杆,我就会有一个意想不到的结果。这是我的代码:

主班

代码语言:javascript
运行
复制
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);

    }

}

卡类:

代码语言:javascript
运行
复制
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;
    }

甲板级:

代码语言:javascript
运行
复制
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;
    }
}

其结果是:

代码语言:javascript
运行
复制
com.star.cards.Deck@143b9a5f
com.star.cards.Card@5513dd59

你能告诉我我需要做些什么才能在控制台上打印出我的牌牌吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-30 04:53:53

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

票数 0
EN

Stack Overflow用户

发布于 2015-08-30 04:55:35

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

代码语言:javascript
运行
复制
@Override
public String toString()
{
    return "Card[suit=" + suits[suit] + ",value=" + values[value] + "]";
}
票数 0
EN

Stack Overflow用户

发布于 2015-08-30 04:59:07

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

如果选择实现toString,只需将方法添加到类中,例如在Card类中:

代码语言:javascript
运行
复制
@Override
public String toString() {
    return value + " " + suit;
}

Deck类也是如此(不确定要在那里打印什么)。您的Spades类保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32293265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档