我正在努力实现 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/