我的 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/