二十一点纸牌游戏:我可以创建堆栈,但无法访问它们



所以这是我的主要类:它创建了一个CradStack对象并使用mixCards方法,您将在下一个类块中看到。

package BlackJack;

public class BlackJack {
public static void main(String[] args) {
    CardStack cs = new CardStack();
    cs.mixCards();
    //cs.pop();
}
public BlackJack() {
}
public void calculateHand() {
}
public void compareHands() {
}

}

这是CardStack类:它扩展了Stack,到目前为止只有方法mix-Cards,该方法在Stack中填充312张卡片(6张卡片,13种类型,4个套件),然后将其与Collections.shuffle方法混合。这应该行得通。

package BlackJack;
import java.util.Collections;
import java.util.Stack;

public class CardStack extends Stack {
public CardStack() {
}

public void mixCards() {
    Stack st = new Stack();
    for (int i = 0; i < 6; i++) {                                           
        for (int k = 0; k < 13; k++) {                                      
            for (int l = 0; l < 4; l++) {                                   
                Card cd = new Card();
                cd.setValue(k);
                cd.setColor(l);
                st.push(cd);
            }
        }
    }
    Collections.shuffle(st);
}

}

这是卡类:稍后我将在上将套件/颜色实现为枚举

package BlackJack;
public class Card {
private int value;
private String color;
//enum Suit { HEARTS, DIAMONDS, CLUBS, SPADES };
public void setValue(int value) {
    this.value = value;
}
public void setColor(int l) {
    if (l == 0) {
        this.color="Hearts";
    }
    if (l == 1) {
        this.color="Clubs";
    }
    if (l == 2) {
        this.color="Diamonds";
    }
    if (l == 3) {
        this.color="Spades";
    }
}
public int getValue() {
    return value;
}
public String getColor() {
    return color;
}
}

有人能解释一下为什么我在使用cs.pop时会出现EmptyStackException吗?

您不需要在mixCards方法中创建单独的Stack,因为您的CardStackStack(因为它扩展了它)
因此,只需使用this.push(您也可以跳过this.部分,因为它无论如何都会被编译器添加)将卡添加到由CardStack当前实例表示的卡堆栈中。

顺便说一句。避免使用原始类型。如果你的班级要持有卡片,那么你应该将其申报为

public class CardStack extends Stack<Card> {
   ...
}

最新更新