【问题标题】:I can't get my card objects to print correctly我无法正确打印卡片对象
【发布时间】:2016-01-27 00:29:25
【问题描述】:

这是我试图展示的方法,它应该是一个 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;
}

}

【问题讨论】:

标签: java arrays list oop superclass


【解决方案1】:

您应该在要打印的对象中覆盖toString() 方法,如下所示:

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

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

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

【讨论】:

    【解决方案2】:

    与@Molske 一样,您需要覆盖toString() 方法。我建议使用 @Override 注释。也可以看看How to override toString() properly in Java?

    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.
        }
    }
    

    【讨论】:

      【解决方案3】:

      您在 Java 中创建的每个对象都从 Object 扩展而来。每个对象都有一个 toString 方法。这就是为什么你可以在System.Out.println(Object) 里面放任何东西。任何进入那里的东西都会打印出toString() 方法中指定的任何内容。对于一个新的类,它没有被指定,所以它会打印出带有哈希码的类名。因此,您只需要覆盖 Card 类中的 toString 方法,并且每个派生类都会这样做。以下是如何修改此here 的示例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-04
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 2016-04-27
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多