我无法正确打印卡片对象

时间:2015-10-27 14:28:30

标签: java arrays list oop superclass

这是我试图显示哪种应该是4x4网格卡的方法。我觉得卡片对象里面有什么问题吗?这是我在printHiddenCard中尝试运行时所得到的。

edu.cpp.cs.cs141.memgame.QCard@182decdb 
edu.cpp.cs.cs141.memgame.StarCard@26f0a63f 
edu.cpp.cs.cs141.memgame.PercCard@4361bd48 
edu.cpp.cs.cs141.memgame.PercCard@4361bd48 
edu.cpp.cs.cs141.memgame.MinusCard@53bd815b 
edu.cpp.cs.cs141.memgame.MinusCard@53bd815b 
edu.cpp.cs.cs141.memgame.PoundCard@2401f4c3 
edu.cpp.cs.cs141.memgame.QCard@182decdb 
edu.cpp.cs.cs141.memgame.SlashCard@7637f22 
edu.cpp.cs.cs141.memgame.ExclCard@4926097b 
edu.cpp.cs.cs141.memgame.StarCard@26f0a63f 
edu.cpp.cs.cs141.memgame.PlusCard@762efe5d 
edu.cpp.cs.cs141.memgame.PlusCard@762efe5d 
edu.cpp.cs.cs141.memgame.SlashCard@7637f22 
edu.cpp.cs.cs141.memgame.ExclCard@4926097b 
edu.cpp.cs.cs141.memgame.PoundCard@2401f4c3



private static int rows = 4;
private static int columns = 4;
    public static Card[][] card = new Card[rows][columns];

 public Card[][] printHiddenCard() {

    QCard c1 = new QCard();
    StarCard c2 = new StarCard();
    MinusCard c3 = new MinusCard();
    PoundCard c4 = new PoundCard();
    ExclCard c5 = new ExclCard();
    PercCard c6 = new PercCard();
    SlashCard c7 = new SlashCard();
    PlusCard c8 = new PlusCard();

    List<Card> allCards = Arrays.asList(c1, c2, c3, c4, c5, c6, c7, c8);
    List<Card> list = new ArrayList<>(allCards);
    list.addAll(allCards);
    Collections.shuffle(list);

    int counter = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            card[i][j] = list.get(counter++);
            System.out.println(card[i][j] + " ");
        }
    }
    return card;
}

这就是其中一个卡片对象:

public class QCard extends Card {

public QCard() {
    super("?");
}

}

这是超类:

public abstract class Card {

private String cardType = "";
private boolean isFlipped = false;

public Card(String cardType) {
    this.cardType = cardType;
}

public String getCardType() {
    return cardType;
}

public boolean isFlipped() {
    return isFlipped;
}

public void setFlipped(boolean isFlipped) {
    this.isFlipped = isFlipped;
}

}

3 个答案:

答案 0 :(得分:1)

您应该覆盖要打印的对象中的public class QCard extends Card { public QCard() { super("?"); } public String toString() { return "card data"; } } 方法,如下所示:

card data

以上示例将始终打印forUsername,因此请添加要包含在printOut中的字段。

答案 1 :(得分:0)

与@Molske一样,您需要覆盖makefile方法。我建议使用ifconfig注释。另请查看How to override toString() properly in Java?

inet addr:172.16.67.137方法属于toString()类。

@Override

答案 2 :(得分:0)

您在Java中创建的每个对象都从Object扩展。每个对象都有一个toString方法。这就是为什么你可以把任何东西都放在System.Out.println(Object)里面。任何内容都会打印出toString()方法中指定的内容。对于新类,未指定,因此它将使用哈希码打印出类名。因此,您需要仅覆盖Card类中的toString方法,并且每个派生类都将执行相同的操作。以下是如何修改此here

的示例