java - 二十一点Java : Exception Error

标签 java runtime-error blackjack

我的 BlackJack Java 游戏出现错误。错误是:

Exception in thread "main" java.lang.NullPointerException<br/> at com.keegan.game.blackjack.Deck.createDeck(Deck.java:48)<br/> at com.keegan.game.blackjack.Deck.<init>(Deck.java:33)

而且我对这段代码中的问题一无所知。任何人都可以帮助我理解错误告诉我的是什么错误吗?

这是 Deck.java 的代码:

public class Deck {

private ArrayList<Card> deck = new ArrayList<Card>();

private List<Card> cardUsed = new ArrayList<Card>();
Card c = new Card(null, null, null, 0);

public Deck(int numCards) {
    this.createDeck(numCards, 4, null);
}

private void createDeck(int numCards, int numSuits, String[] cardRanks) {
    deck = new ArrayList<Card>();
    cardUsed = new ArrayList<Card>();
    if ((numCards % numSuits) > 0) return;
    for (int i=0; i < numSuits; i++) {
        for(int j=1; j <= (numCards / numSuits); j++) {
            deck.add(new Card(new Suit(i), cardRanks[j-1], cardRanks, j));
        }
    }
}

public Card dealCard( ) {

    Card dealtCard = null;
    if (deck.size() == 0){
        deck.addAll(cardUsed);
        this.shuffle();
        cardUsed = new ArrayList<Card>();
    }

    dealtCard = deck.get(0);
    deck.remove(0);
    cardUsed.add(dealtCard);

    return dealtCard;
}

public void shuffle() {
    Collections.shuffle(deck);
}

public ArrayList<Card> getDeck() {
    return deck;
}

public void setDeck(ArrayList<Card> deck) {
    this.deck = deck;
}
public int getNumUsedCards() {
    return cardUsed.size();
}

public List<Card> getCardUsed() {
    return cardUsed;
}

public void setCardUsed(List<Card> cardUsed) {
    this.cardUsed = cardUsed;
}

最佳答案

你正在传递一个null数组

this.createDeck(numCards, 4, null);

然后在您的语句中将其作为 cardRanks[j-1] 访问

deck.add(new Card(new Suit(i), cardRanks[j-1], cardRanks, j));

编辑:
您可能需要将 Deck 创建为

this.createDeck(numCards, 4);

并将Card添加为

deck.add(new Card(new Suit(i), j));

因为 String[] cardRanks 已经在您的 Card 类中初始化。而且,在设计方面它是正确的,因为 Deck 不应该知道卡片等级。 Card 应该将其封装起来,也许还实现 Comparable

关于java - 二十一点Java : Exception Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17368013/

相关文章:

java - 是否有任何有用的自定义类(或函数)用于选择日期?

java - 从 Java 中找出一个 dll 是 32 位还是 64 位

android - 无法在 Android 7.0 上将高分辨率图像 (1920x1280) 设置为 ImageView

javascript - Angular 服务调用 API 导致 switchmap 错误

php - 当 nginx 和 db 在不同的服务器上时,db 查询出错? "PHP message: Database transaction aborted automatically in"

java - Java中如何将两个 "Cards"的值相加?

java - 我在 Java 中做错了什么 blackjack 文件计数器?

java - 如何保证 java JDBC 连接到 oracle 的安全

java - 如何收集 pojo id 到 pojo 上集合的一组属性的映射

java - 为 JButton 提供多个鼠标点击选项(二十一点游戏)