java - 卡片数组 toString - Java

标签 java arrays playing-cards

我正在努力实现 toString 方法来输出一副纸牌 (ARRAY)。

我有一个卡片类

public class Card {

    private Rank rank;
    private Suit suit;

    public Card(Rank theRank, Suit theSuit) {
        rank = theRank;
        suit = theSuit;
    }

    public Rank getRank() {
        return rank;
    }

    public Suit getSuit() {
        return suit;
    }

    public String toString() {
        return (rank + " of " + suit);
    }

}

排名实现为枚举

public enum Rank {

    ACE(1), TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(
            9), TEN(10), JACK(10), QUEEN(10), KING(10);

    private final int rankValue;

    private Rank(int value) {
        rankValue = value;
    }

    public int getRankValue() {
        return rankValue;
    }

}

作为枚举实现的套装

public enum Suit {
    HEARTS, CLUBS, DIAMONDS, SPADES;
}

甲板类

public class Deck {

    private static Card[] cards = new Card[52];

    public Deck() {
        int i = 0;
        for (Suit s : Suit.values()) {
            for (Rank r : Rank.values()) {
                cards[i++] = new Card(r, s);

            }
        }
    }

    public Card[] getCards() {
        return cards;
    }

    // toString METHOD NOT WORKING
    public String toString() {

        String s = ("The Complete Deck consists of: \n" + getCards());

        return s;

    }

}

还有一个 DeckDriver 类(包括 main 方法)

public class TestDeck {

    public static void main(String[] args) {

        System.out.println("*** DISPLAY A FULL DECK OF CARDS ***\n");

        Deck theDeck = new Deck();

        Card[] cards = theDeck.getCards();

        for (Card c : theDeck.getCards()) {
            System.out.println(c);
        }

        // or
        System.out.println("");
        System.out.println(theDeck.toString());

    }

}

第一个 println 语句按需要打印出来,但我需要在 Deck 类中实现一个 toString() 方法。这是我遇到困难的地方。

从上面的代码(不包括第一个 println 语句的输出),我得到的输出是:

完整的套牌包括: [LCard;@2c6f7ce9

任何能让我理解和纠正这个问题的建议都会很棒。

谢谢。

* 编辑 *

所以我尝试了以下方法:

public String toString() {

    String s = ("The Complete Deck consists of: \n" + Arrays
            .toString(cards));
    return s;

}

& 它输出数组,但在一个单独的、宽的、长的行中。有没有办法在新行上打印每个数组元素?

谢谢。

最佳答案

您看到的是数组的 toString 输出。您需要迭代 Card 数组中的每个项目并输出其 toString 值。或者您可以使用 java.util.Arrays 中的方法并调用 Arrays.toString(getCards());

如果您不喜欢输出,那么您必须自己进行迭代和输出(或使用来自 apache commons 或 guava 的东西或其他东西将数组值连接成一个漂亮的、可读的字符串。

像这样的东西应该可以工作:

public String toString() {
    StringBuilder buf = new StringBuilder( "The Complete Deck consists of: \n" );
    for ( Card card : getCards() ) {
      buf.append( card.toString()).append( "\n" );
    }
    return buf.toString();
}

或使用 apache StringUtils :

public String toString() {
    return "The Complete Deck consists of: \n" + StringUtils.join( getCards(), "\n" );
}

关于java - 卡片数组 toString - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19506264/

相关文章:

Java 可选获取如果存在

java - Android:单击时列表中的项目不会变成橙色?

javascript - 获取具有以选定字母开头的 "name"属性的数组中第一个对象的索引

Java:如何创建一个数组并用构造函数中的对象填充它?

java - Springboot @Retryable 包含多个异常

java - 如何使用 JSTL 确定列表中的对象是否实现了类

java - Java中BinaryTree的inorder方法(数组实现)

c - 在C中使用数组进行BCD转换

java - 如何显示我原来的一副纸牌 Java

algorithm - 7 张扑克牌手评估器