java报错空指针异常_java – 空指针异常错误,没有明显的代码错误

我在这里有一个错误,我不知道它来自哪里.我在初学者的

java课程是高中,所以我在这里还没有太多的经验.我有3个相互合并的程序.

我有一个卡片类,可以创建一张扑克牌

//********************************************************************

// 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;

}

}

我有一张Deck Of cards文件可以创建52张卡片

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());

}

}

他们都没有错误.但是当我运行驱动程序时,我得到了输出

Exception in thread "main" java.lang.NullPointerException

at DeckOfCards.shuffleCards(DeckOfCards.java:39)

at DeckTester.main(DeckTester.java:8)

我试过在交易方法中改变Null无济于事.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值