我正在尝试建立一个二十一点游戏。我已经创建了一个套牌,现在我想要显示它。
我知道我做错了,因为我无法访问CardStack类中的displayStack。此外,我有一种感觉,我没有正确地继承。我怎么能解决这个问题?
这是我的代码:
public class CreateCardDeck {
int deckSize = 52;
CardStack cardStack = new CardStack(deckSize);
public void CreateDeck() {
String[] suit = {"clubs", "diamonds", "hearts", "spades"};
int[] rank = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
for (int i = 0; i < rank.length; i ++) {
for (int j = 0; j < suit.length; j++) {
cardStack.push(suit[j], rank[i]);
}
}
}
}
卡类:
class Card {
String suit;
int rank;
Card(String suit, int rank) {
this.suit = suit;
this.rank = rank;
}
public String getSuit() {
return suit;
}
public String getRank() {
String nameTheRank;
if (rank == 1)
nameTheRank = "Ace";
else if (rank == 11)
nameTheRank = "Jack";
else if (rank == 12)
nameTheRank = "Queen";
else if (rank == 13)
nameTheRank = "King";
else
nameTheRank = String.valueOf(rank);
return nameTheRank;
}
}
CardStack课程:
class CardStack {
public void displayDeck() {
for (int i = 0; i < stackArray.length; i ++)
System.out.println(stackArray[i]);
}
}
主要类别:
public class MainClass {
public static void main(String[] args) throws IOException {
CreateCardDeck c = new CreateCardDeck();
c.CreateDeck();
// How to display my deck?
}
}
答案 0 :(得分:2)
我会重新设计您的类型。 CreateCardDeck
听起来应该是createDeck
或可能只是CardDeck
类型中名为Card
的静态方法。这听起来像西装和数字的知识不应该真正成为该方法的一部分。卡片通常用作Java中枚举的演示 - 一个用于值的枚举(ace为王)和一个用于套装。
想想拥有CreateCardDeck
的实例的真正含义 - 这真的对你有意义吗?感觉更像是动词(方法)而不是名词(类型)。
现在你可以拥有CardDeckFactory
或类似的东西 - 但是我不希望甲板成为对象状态的一部分;它只会被一种方法返回。
答案 1 :(得分:1)
你在寻找这个吗?扩展课程CreateCardDeck
并引用它的cardStack
变量?
class Card extends CreateCardDeck
{
public void displayDeck()
{
for (int i = 0; i < cardStack.size(); i ++)
System.out.println(cardStack.get(i));
}
}
答案 2 :(得分:1)
让我们尽可能简单:你需要一张牌来开始打牌,这样会更好 然后你需要一个甲板来存储你的所有卡。
所以你可以有两个类:Deck和Card。当你创建一个牌组的实例时,它会生成你需要玩的52张牌。
public class Card{}
public class Deck
{
int deckSize = 52;
// Here you certainly need a list or a stack to stock your card
SomeContainer cardStack;
public Deck()
{
String[] suit = {"clubs", "diamonds", "hearts", "spades"};
int[] rank = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
for (int i = 0; i < rank.length; i ++)
{
for (int j = 0; j < suit.length; j++)
{
cardStack.push(new Card(suit[j], rank[i]));
}
}
}
public void Display()
{
for (int i = 0; i < cardStack.length; i ++)
System.out.println(cardStack[i]);
}
}
public class MainClass
{
public static void main(String[] args) throws IOException
{
Deck deck = new Deck();
deck.Display();
}
}
答案 3 :(得分:1)
您没有显示您的CardStack类,也没有显示所有的Card类
基本上你应该有一个showCards()方法, 而且在卡本身中,实现代表卡的toString是有用的: 像这样的东西:
假设您有一个列表或一组卡片:
public void showCards() {
for (Card card : cards) {
System.out.println(card);
}
}
并在卡片中:
public class Card {
private String suit;
private int rank;
public String toString() {
return rank + " of " + suit;
}
//...the rest of the code
}
在CreateCardDeck中添加一个getter:
public CardSTack getCardStack() {
return cardStack;
}
然后在你的主要添加:
c.getCardStack().showCards();