我是java编程的初学者。我正在尝试重新制作纸牌游戏战争的简化版本。我跑我的程序,它被张贴下方,它回来了与此错误:线程“main”中的异常java.lang.NullPointerException?
异常线程“main”显示java.lang.NullPointerException
在cardgame.BuildDeck(cardgame.java:36)
在cardgame.main(cardgame.java:60)
我一直在试图通过研究来解决我自己的这个问题,但我不解决这个问题。我想知道是否有人可以帮助我。如果您确实需要关于我的程序的其他信息,请随时询问。提前致谢!
-FGxMatta
public class cardgame
{
static class TheCard
{
// Java getter & setter
private String CardName;
private int CardRank;
private int Chosen;
public TheCard(int rank, String name)
{
this.CardName = name;
this.CardRank = rank;
this.Chosen = 0;
}
}
@SuppressWarnings("null")
private static TheCard[] BuildDeck()
{
TheCard[] TheDeck = null;
String[] Cards = {"2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"};
String[] Suits = {"Spades","Hearts","Diamonds","Clubs"};
int[] Rank = {2,3,4,5,6,7,8,9,10,11,12,13,14};
int cardnumber = 0;
for (int i = 0; i < Cards.length; i++)
{
for (int j = 0; j < Suits.length; j++)
{
String deckcard = Cards[i];
String suitcard = Suits[j];
String cardname = deckcard + "-" + suitcard;
TheDeck[cardnumber] = new TheCard(Rank[i], cardname);
cardnumber++;
}
}
return TheDeck;
}
private static TheCard GetRandomCard(TheCard[] OrderedDeck)
{
TheCard thecard;
int random = (int) (51*Math.random());
thecard = OrderedDeck[random];
if (thecard.Chosen == 0) // if available...
{
thecard.Chosen = 1; // mark it taken...
return thecard;
}
else
{
return GetRandomCard(OrderedDeck);
}
}
public static void main(String args[])
{
TheCard[] OrderedDeck = BuildDeck();
System.out.println ("Welcome, Prepare for War!");
int decksize = OrderedDeck.length;
int player1wincount = 0;
int player2wincount = 0;
int tiecount = 0;
for (int cardcount = 0; cardcount < decksize;)
{
TheCard Player1 = GetRandomCard(OrderedDeck);
cardcount++;
TheCard Player2 = GetRandomCard(OrderedDeck);
cardcount++;
System.out.println ("Player 1's card is: " + Player1.CardName);
System.out.println ("Player 2's card is: " + Player2.CardName);
if (Player1.CardRank > Player2.CardRank)
{
System.out.println("Player 1 wins this hand");
player1wincount++;
}
if (Player1.CardRank < Player2.CardRank)
{
System.out.println("Player 2 wins this hand");
player2wincount++;
}
if (Player1.CardRank == Player2.CardRank)
{
System.out.println("Player 1 and Player 2 played the same valued card");
tiecount++;
}
}
System.out.println ("Player 1 won " + String.valueOf(player1wincount) + " hands");
System.out.println ("Player 1 won " + String.valueOf(player2wincount) + " hands");
System.out.println ("There were " + String.valueOf(tiecount) + " ties");
}
}
如果你希望编译器给你一个大:
应代之以提示问题出在哪里,删除行'@SuppressWarnings(“null”)'然后您会准确地知道您尝试访问空对象的位置。 – DaveJohnston 2011-03-04 17:22:55
我假设你在使用Eclipse,并且Eclipse提示'@SuppressWarnings(“null”)'。删除该行并修复导致警告的代码。警告是指示问题。在知道后果之前不要使用@ SuppressWarnings。警告试图阻止您收到的确切错误。 – 2011-03-04 17:23:36