EDIT: Мой первый вопрос был разрешен, однако функция getValue() всегда возвращает 11. Любые мысли?Java простой BlackJack, java.lang.NullPointerException
EDIT: Нашел,
Collections.shuffle(Arrays.asList(deck));
Не правильно перетасовки. Я не знаю почему.
Я выполняю задание, где мне нужно написать/заполнить какой-нибудь код, чтобы написать простую программу для блэкджека.
Существует три класса, которые я определил: класс карты, класс рук (который представляет собой массив карт и некоторые другие значения) и класс Deck, который также является массивом карт.
В классе «Рука» у меня есть метод, который суммирует все значения карт, и всякий раз, когда я запускаю свой код, я получаю исключение java.lang.NullPointerException, и консоль указывает на мой этот метод «addHand»:
public int addHand(){
int j=0;
for(int i=0; i<=counter-1; i++){
j += Cards[i].getValue();
}
return j;
}
Я думаю, это потому, что некоторые из значений в карты [] равны нулю. Но «счетчик» не должен позволять никому из них добавлять. Я включу остальную часть класса рук, а также класс карты.
рук Класс:
public class Hand {
private Card[] Cards;
private int counter;
//private int valueOfHand;
public Hand(){
Cards = new Card[10];
counter = 0;
}
public int numCards(){
return counter;
}
public Card getCard(int i){
return Cards[i];
}
public int getCounter() {
return counter;
}
public void setCounter(int counter) {
this.counter = counter;
}
public void addCard(Card card){
Cards[counter] = card;
setCounter(counter+1);
}
public int addHand(){
int j=0;
for(int i=0; i<=counter-1; i++){
j += Cards[i].getValue();
}
return j;
}
}
А Класс карты:
public class Card {
private String value;
private String suit;
public Card(String number, String shape){
value = number;
suit = shape;
}
public int getValue() {
if (value.equals("King") || value.equals("Queen") || value.equals("Jack")){
return 10;
}
else if (value.equals("Ace")){
return 11;
}
else {
return Integer.parseInt(value);
}
}
public void setValue(String value) {
this.value = value;
}
public String getSuit() {
return suit;
}
public void setSuit(String suit) {
this.suit = suit;
}
}
Я не знаю, если мне нужно отправить что-нибудь еще, я был бы рад, если это необходимо.
Точная ошибка:
Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
at Hand.addHand(Hand.java:39)
at BlackJackGUIPanel$CardPanel.hitMe(BlackJackGUIPanel.java:182)
at BlackJackGUIPanel$CardPanel.actionPerformed(BlackJackGUIPanel.java:161)
Вот код Hitme:
void hitMe() {
if (!gameInProgress) {
message = "Click \"New Game\" to start a new game!";
repaint();
return;
}
player.addCard(deck.giveCard());
if(player.addHand() > 21){
message = "Game over, you busted";
gameInProgress = false;
}
message = "You clicked Hit Me!";
repaint();
и код) giveCard (:
public Card giveCard(){
Card temp = Decks[0];
for(int i = 1; i<52; i++){
Decks[i-1] = Decks[i];
}
Decks[51] = temp;
return temp;
}
Я не мог найти лучшего способ сделать эту часть. здесь, где я инициализировать свою колоду:
public Deck(){
Decks = new Card[52];
//int cardNumber = 2;
for(int i = 0; i < 52; i += 4){
switch (i/4){
case 0: Decks[i] = new Card("2", "Spades");
Decks[i+1] = new Card("2", "Hearts");
Decks[i+2] = new Card("2", "Clubs");
Decks[i+3] = new Card("2", "Diamonds");
case 4: Decks[i] = new Card("3", "Spades");
Decks[i+1] = new Card("3", "Hearts");
Decks[i+2] = new Card("3", "Clubs");
Decks[i+3] = new Card("3", "Diamonds");
case 8: Decks[i] = new Card("4", "Spades");
Decks[i+1] = new Card("4", "Hearts");
Decks[i+2] = new Card("4", "Clubs");
Decks[i+3] = new Card("4", "Diamonds");
case 12: Decks[i] = new Card("5", "Spades");
Decks[i+1] = new Card("5", "Hearts");
Decks[i+2] = new Card("5", "Clubs");
Decks[i+3] = new Card("5", "Diamonds");
case 16: Decks[i] = new Card("6", "Spades");
Decks[i+1] = new Card("6", "Hearts");
Decks[i+2] = new Card("6", "Clubs");
Decks[i+3] = new Card("6", "Diamonds");
case 20: Decks[i] = new Card("7", "Spades");
Decks[i+1] = new Card("7", "Hearts");
Decks[i+2] = new Card("7", "Clubs");
Decks[i+3] = new Card("7", "Diamonds");
case 24: Decks[i] = new Card("8", "Spades");
Decks[i+1] = new Card("8", "Hearts");
Decks[i+2] = new Card("8", "Clubs");
Decks[i+3] = new Card("8", "Diamonds");
case 28: Decks[i] = new Card("9", "Spades");
Decks[i+1] = new Card("9", "Hearts");
Decks[i+2] = new Card("9", "Clubs");
Decks[i+3] = new Card("9", "Diamonds");
case 32: Decks[i] = new Card("10", "Spades");
Decks[i+1] = new Card("10", "Hearts");
Decks[i+2] = new Card("10", "Clubs");
Decks[i+3] = new Card("10", "Diamonds");
case 36: Decks[i] = new Card("Jack", "Spades");
Decks[i+1] = new Card("Jack", "Hearts");
Decks[i+2] = new Card("Jack", "Clubs");
Decks[i+3] = new Card("Jack", "Diamonds");
case 40: Decks[i] = new Card("Queen", "Spades");
Decks[i+1] = new Card("Queen", "Hearts");
Decks[i+2] = new Card("Queen", "Clubs");
Decks[i+3] = new Card("Queen", "Diamonds");
case 44: Decks[i] = new Card("King", "Spades");
Decks[i+1] = new Card("King", "Hearts");
Decks[i+2] = new Card("King", "Clubs");
Decks[i+3] = new Card("King", "Diamonds");
case 48: Decks[i] = new Card("Ace", "Spades");
Decks[i+1] = new Card("Ace", "Hearts");
Decks[i+2] = new Card("Ace", "Clubs");
Decks[i+3] = new Card("Ace", "Diamonds");
}
}
Collections.shuffle(Arrays.asList(Decks));
}
Это зависит от того, как вы инициализируете Руку. Возможно, в вашем основном приложении (BlackJackGUIPanel) вы случайно вызываете 'addHand' с' null' Card? – justhalf
можно просто отлаживать, чтобы проверить, не получилось ли 'null' для всех значений Карт [i] или просто определенное значение i. –
Где 'addCard (Card)' на самом деле вызывается? –