簡體   English   中英

我無法正確打印卡片對象

[英]I can't get my card objects to print correctly

這是我嘗試顯示的方法,應該是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;
}

}

您應該在要打印的對象中重寫toString()方法,如下所示:

public class QCard extends Card {
    public QCard() {
        super("?");
    }

    public String toString() {
        return "card data";
    }
}

上面的示例將始終打印card data ,因此添加要包含在printOut中的字段。

像@Molske一樣,您需要重寫toString()方法。 我建議使用@Override批注。 還要看看如何在Java中正確重寫toString()?

toString()方法屬於QCard類。

public class QCard extends Card {
    public QCard() {
        super("?");
    }

    public String toString() {
        return this.cardType; //as long as that's all you need, this will do.
    }
}

您在Java中創建的每個對象都從對象擴展。 每個對象都有一個toString方法。 這就是為什么您可以將任何內容直接放入System.Out.println(Object) 它里面的所有內容都會打印出toString()方法中指定的內容。 對於新類,它沒有指定,因此它將打印出帶有哈希碼的類名。 因此,您將僅需要在Card類中重寫toString方法,並且每個派生類都將執行相同的操作。 這是如何在此處修改此示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM