-1

在过去的一个小时里,我一直在尝试解决 java.lang.NullPointerException。当我调用 play() 方法并输入 no 时会发生此错误。我已经评论了错误指向下方的位置。我将不胜感激。谢谢。

import java.util.ArrayList;


public class Game
{
private InputReader input ;
private Deck newDeck;
private ArrayList <Card> hand;


public Game(Deck deckToAdd)
{
    input = new InputReader();
    newDeck = deckToAdd;
    hand = new ArrayList <Card>();
}


public void dealCard()
{

    hand.add(newDeck.takeCard());
}

public void showHand()
{
    for(Card showCards: hand){
        if(hand == null){
          System.out.println("(Warning, the deck may have been empty the last time you dealt a      card)");
        }
          System.out.println(showCards.getDescription() + " of " + showCards.getSuit()); 
         //  Error points to above line
    }
}


public int getHandValue()
{
    int counter = 0;
    int handValue = 0;
    while(counter < hand.size()){
        Card checker = hand.get(counter);
        handValue += checker.getValue();
        counter++;
    }
    return handValue;
}

public void play()      //Error occurs when invoking this method and selecing no, points to showHand() method                                 
{
    boolean userWantsToPlay = true;
    while(userWantsToPlay){
        dealCard();
        showHand();
        System.out.println("Hand Value : " + getHandValue());
        System.out.println("Do you want to continue? (yes or no)");
        String userInput = input.getInput();
        if(userInput == "no"){
            userWantsToPlay = false;
        }
    }

}
}
4

3 回答 3

4

你的条件不对:

if (hand == null) {
   // do your stuff
}
else {
   // do your stuff
}

在您的情况下,您的第二个System.out.println将始终执行,因为不在条件下,并且对于两种情况(null,not null)都将适用。

注意:我还在您的代码中看到更多“脏”代码,例如您正在比较Strings的代码==,它不起作用,因为它比较的是引用,而不是内容。总是当你想比较时Strings你需要使用equals()而不是==这样

userInput.equals("no") {
   // do your stuff
}
于 2013-03-10T10:54:28.573 回答
3

您还应该替换:

userInput == "no"

和:

userInput.equals("no")
于 2013-03-10T11:01:09.443 回答
2

而不是你的代码:

for(Card showCards: hand){
        if(hand == null){
          System.out.println("(Warning, the deck may have been empty the last time you dealt a      card)");
        }
          System.out.println(showCards.getDescription() + " of " + showCards.getSuit()); 
         //  Error points to above line
    }

不应该

if(hand!=null){
for(Card showCards: hand){
        if(showCards== null){
          System.out.println("(Warning, the deck may have been empty the last time you dealt a      card)");
        }else{
          System.out.println(showCards.getDescription() + " of " + showCards.getSuit()); 

        }
    }
}

检查 showCards 而不是 hand.But 调试会有所帮助

于 2013-03-10T10:56:34.147 回答