我无法正确打印我的卡片对象
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
,因此请添加要包含在打印输出中的字段。
与@Molske 一样,您需要重写 toString()
方法。我建议使用 @Override
注释。也看看 How to override toString() properly in Java?
toString()
方法属于 QCard
class。
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()
方法中指定的任何内容。对于新的 class 没有指定,因此它将打印出 class 名称和哈希码。因此,您只需要覆盖 Card class 中的 toString 方法,每个派生的 class 都会执行相同的操作。下面是如何修改此 .
的示例
这是我尝试显示的方法,应该是 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
,因此请添加要包含在打印输出中的字段。
与@Molske 一样,您需要重写 toString()
方法。我建议使用 @Override
注释。也看看 How to override toString() properly in Java?
toString()
方法属于 QCard
class。
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()
方法中指定的任何内容。对于新的 class 没有指定,因此它将打印出 class 名称和哈希码。因此,您只需要覆盖 Card class 中的 toString 方法,每个派生的 class 都会执行相同的操作。下面是如何修改此