Java – null pointer exception error, no obvious code error
•
Java
I have a mistake here. I don't know where it comes from My java course for beginners is high school, so I don't have much experience here I have three merging programs
//******************************************************************** // Card.java Author: Lewis and Loftus // // Solution to Programming Project 4.5 //******************************************************************** import java.util.*; public class Card { public final static int ACE = 1; public final static int TWO = 2; public final static int THREE = 3; public final static int FOUR = 4; public final static int FIVE = 5; public final static int SIX = 6; public final static int SEVEN = 7; public final static int EIGHT = 8; public final static int NINE = 9; public final static int TEN = 10; public final static int JACK = 11; public final static int QUEEN = 12; public final static int KING = 13; public final static int CLUBS = 1; public final static int DIAMONDS = 2; public final static int HEARTS = 3; public final static int SPADES = 4; private final static int NUM_FACES = 13; private final static int NUM_SUITS = 4; private int face,suit; private String faceName,suitName; private int myInt1,myInt2; Random rand = new Random(); //----------------------------------------------------------------- // Creates a random card. //----------------------------------------------------------------- public Card () { face = rand.nextInt(4) + 1; setFaceName(); suit = rand.nextInt(13) + 1; setSuitName(); } //----------------------------------------------------------------- // Sets the string representation of the face using its stored // numeric value. //----------------------------------------------------------------- private void setFaceName() { switch (face) { case 1: faceName = "Ace"; break; case 2: faceName = "Two"; break; case 3: faceName = "Three"; break; case 4: faceName = "Four"; break; case 5: faceName = "Five"; break; case 6: faceName = "Six"; break; case 7: faceName = "Seven"; break; case 8: faceName = "Eight"; break; case 9: faceName = "Nine"; break; case 10: faceName = "Ten"; break; case 11: faceName = "Jack"; break; case 12: faceName = "Queen"; break; case 13: faceName = "King"; break; } } //----------------------------------------------------------------- // Sets the string representation of the suit using its stored // numeric value. //----------------------------------------------------------------- private void setSuitName() { switch (suit) { case 1: suitName = "Clubs"; break; case 2: suitName = "Diamonds"; break; case 3: suitName = "Hearts"; break; case 4: suitName = "Spades"; break; } } //----------------------------------------------------------------- // Determines if this card is higher than the passed card. The // second parameter determines if aces should be considered high // (beats a King) or low (lowest of all faces). Uses the suit // if both cards have the same face. //----------------------------------------------------------------- public boolean isHigherThan (Card card2,boolean aceHigh) { boolean result = false; if (face == card2.getFace()) { if (suit > card2.getSuit()) result = true; } else { if (aceHigh && face == ACE) result = true; else if (face > card2.getFace()) result = true; } return result; } //----------------------------------------------------------------- // Determines if this card is higher than the passed card,// assuming that aces should be considered high. //----------------------------------------------------------------- public boolean isHigherThan (Card card2) { return isHigherThan (card2,true); } //----------------------------------------------------------------- // Returns the face (numeric value) of this card. //----------------------------------------------------------------- public int getFace () { return face; } //----------------------------------------------------------------- // Returns the suit (numeric value) of this card. //----------------------------------------------------------------- public int getSuit () { return suit; } //----------------------------------------------------------------- // Returns the face (string value) of this card. //----------------------------------------------------------------- public String getFaceName () { return faceName; } //----------------------------------------------------------------- // Returns the suit (string value) of this card. //----------------------------------------------------------------- public String getSuitName () { return suitName; } //----------------------------------------------------------------- // Returns the string representation of this card,including // both face and suit. //----------------------------------------------------------------- public String toString () { return faceName + " of " + suitName; } }
I have a deck of cards file that can create 52 cards
import java.util.*; public class DeckOfCards { private Card deckOfCards[]; private int currentCardUsed; private final int NumberOfCards = 52; private int nextCard; private Random rand; String myString = "All Cards have been dealt."; public DeckOfCards() { deckOfCards = new Card[NumberOfCards]; currentCardUsed = 0; Random rand = new Random(); for(int index = 0; index < deckOfCards.length; index ++) { deckOfCards[index] = new Card(); } } public void shuffleCards() { currentCardUsed = 0; for(int newCard = 0; newCard < deckOfCards.length; newCard ++) { int nextCard = rand.nextInt(NumberOfCards); Card temporaryDeck = deckOfCards[newCard]; deckOfCards[newCard] = deckOfCards[nextCard]; deckOfCards[nextCard] = temporaryDeck; } } public Card dealCard() { if(currentCardUsed < deckOfCards.length) { return deckOfCards[currentCardUsed ++]; } else { return null; } } }
public class DeckTester { public static void main(String [] args) { DeckOfCards deck = new DeckOfCards(); deck.shuffleCards(); System.out.println(deck.dealCard()); System.out.println(deck.dealCard()); System.out.println(deck.dealCard()); System.out.println(deck.dealCard()); System.out.println(deck.dealCard()); System.out.println(deck.dealCard()); } }
They are all right But when I run the driver, I get the output
Exception in thread "main" java.lang.NullPointerException at DeckOfCards.shuffleCards(DeckOfCards.java:39) at DeckTester.main(DeckTester.java:8)
I've tried to change null in the trading method. It doesn't help
Solution
It looks like you declared a local random object in the constructor
Try changing line 25 to:
rand = new Random();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码