Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卡阵列toString-Java_Java_Arrays_Playing Cards - Fatal编程技术网

卡阵列toString-Java

卡阵列toString-Java,java,arrays,playing-cards,Java,Arrays,Playing Cards,我正在努力实现一个toString方法来输出一副牌(数组) 我有一门卡片课 public class Card { private Rank rank; private Suit suit; public Card(Rank theRank, Suit theSuit) { rank = theRank; suit = theSuit; } public Rank getRank() { return

我正在努力实现一个toString方法来输出一副牌(数组)

我有一门卡片课

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 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类(包括主方法)

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

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

整个甲板包括: [LCard;@2c6f7ce9

任何建议,使我能够理解和纠正这个问题将是伟大的

谢谢

*编辑*

因此,我尝试了以下方法:

public String toString() {

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

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


谢谢。

您正在看到数组的toString输出。您需要迭代卡数组中的每个项目并输出其toString值。或者您可以使用并调用
Arrays.toString(getCards());

如果您不喜欢输出,那么您必须自己进行迭代并输出(或者使用ApacheCommons或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();
}
或与:


您正在查看数组的toString输出。您需要迭代卡数组中的每个项并输出其toString值。或者您可以使用方法从并调用
Arrays.toString(getCards());

如果您不喜欢输出,那么您必须自己进行迭代并输出(或者使用ApacheCommons或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();
}
或与:


您有两种选择。我更喜欢第二种:

getCards()方法更改为

public String getCards(){
    return Arrays.deepToString(cards);
}
最好在toString()方法中执行类似操作

public String toString() {

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

    return s;

}
这个
Arrays.deeptoString()
的作用是为您提供数组的字符串表示形式

更新1:-下面是在新行上打印每个元素的代码

public String toString(int[] arr) {
        String temp = "";
        for (int i : arr) {
            temp = temp + i + "\n";
        }
        return temp;
    }
更新2:-我的第一次更新是让您了解如何从新行数组中获取包含元素的字符串。似乎人们希望我为您提供可以粘贴到程序中并使其运行的确切代码

 public String toString() {
            String temp = "";
            for (Card c : Cards) {
                temp = temp + c.toString() + "\n";
            }
            return temp;
        }

您有两种选择。我更喜欢第二种:

getCards()方法更改为

public String getCards(){
    return Arrays.deepToString(cards);
}
最好在toString()方法中执行类似操作

public String toString() {

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

    return s;

}
这个
Arrays.deeptoString()
的作用是为您提供数组的字符串表示形式

更新1:-下面是在新行上打印每个元素的代码

public String toString(int[] arr) {
        String temp = "";
        for (int i : arr) {
            temp = temp + i + "\n";
        }
        return temp;
    }
更新2:-我的第一次更新是让您了解如何从新行数组中获取包含元素的字符串。似乎人们希望我为您提供可以粘贴到程序中并使其运行的确切代码

 public String toString() {
            String temp = "";
            for (Card c : Cards) {
                temp = temp + c.toString() + "\n";
            }
            return temp;
        }

默认情况下,Java的本机数组不实现“toString()”。您必须手动执行此操作,将卡的toString()分别添加到一个循环中并返回,或者按照另一个答案中的建议执行类似于array.toString的操作

如果希望卡片显示在单独的行上,则必须实现自己的循环,如下所示:

public String toString() {
    String str = "";
    for(Card c: cards) {
        str += c.toString() + "\n";
    }
    return str;
}

默认情况下,Java的本机数组不实现“toString()”。您必须手动执行此操作,将卡的toString()分别添加到一个循环中并返回,或者按照另一个答案中的建议执行类似于array.toString的操作

如果希望卡片显示在单独的行上,则必须实现自己的循环,如下所示:

public String toString() {
    String str = "";
    for(Card c: cards) {
        str += c.toString() + "\n";
    }
    return str;
}

要将字符串与某个非字符串对象连接起来,Java使用该
非字符串对象的
toSrting()
方法的结果。因此它与
“myString”+someObject.tostring()
相同。在您的例子中,您正在尝试这样做

"The Complete Deck consists of: \n" + getCards()
由于
getCards()
返回
Card[]
数组,Java将在该数组上调用
toString()

数组将不允许您重写其
toString()
方法,并将使用其从返回的对象类继承的版本

getClass().getName() + "@" + Integer.toHexString(hashCode())
所以你看到的是
[LCard;@2c6f7ce9
,意思是

  • 一维数组
    [L
  • 卡的类型对象
  • 其十六进制格式的
    hashCode
    2c6f7ce9

如果要创建表示数组中元素的字符串,可以使用
Arrays.toString(yourArray)
或只是迭代数组中的所有元素并将它们连接起来

因此,可以将
Deck
类中的
toString()
方法更改为

public String toString() {
    return  "The Complete Deck consists of: \n" + Arrays.toString(getCards());
}
或者,如果您希望每张卡都在新的行中

public String toString() {
    StringBuilder sb = new StringBuilder("The Complete Deck consists of: ");
    sb.append(System.lineSeparator());

    for (int i = 0; i < cards.length - 1; i++) {
        sb.append(cards[i].toString()).append(System.lineSeparator());
    }
    sb.append(cards[cards.length - 1]);

    return sb.toString();
}
公共字符串toString(){
StringBuilder sb=新StringBuilder(“整个甲板包括:”);
sb.append(System.lineSeparator());
对于(int i=0;i
要将字符串与某个非字符串对象连接起来,Java使用该
非字符串对象的
toSrting()
方法的结果。因此它与
“myString”+someObject.tostring()
相同。在您的情况下,您正在尝试这样做

"The Complete Deck consists of: \n" + getCards()
由于
getCards()
返回
Card[]
数组,Java将在该数组上调用
toString()

数组不允许您重写其
toString()
方法,并将使用从对象类继承的方法