“线程中的异常”;“主要”;java.lang.NullPointerException?
我是java编程的初学者。我试图重新创建一个简化版的纸牌游戏战争。我运行了下面发布的程序,它返回时出现了以下错误: 线程“main”java.lang.NullPointerException中的异常 在cardgame.BuildDeck(cardgame.java:36) 在cardgame.main(cardgame.java:60) 我一直试图通过研究自己解决这个问题,但我无法解决它。我想知道是否有人能帮我。如果你需要关于我的计划的任何其他信息,请直接询问。提前谢谢 -FGxMatta“线程中的异常”;“主要”;java.lang.NullPointerException?,java,Java,我是java编程的初学者。我试图重新创建一个简化版的纸牌游戏战争。我运行了下面发布的程序,它返回时出现了以下错误: 线程“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");
}
}
公共类卡片游戏
{
静态类卡片
{
//Java getter和setter
私有字符串CardName;
私人int CardRank;
选择私有int;
公共密码卡(整数等级,字符串名称)
{
this.CardName=名称;
this.CardRank=rank;
这个。选择=0;
}
}
@抑制警告(“空”)
私有静态卡[]BuildDeck()
{
卡片[]复选框=null;
字符串[]卡片={“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“杰克”、“女王”、“国王”、“王牌”};
字符串[]套装={“黑桃”、“红桃”、“钻石”、“梅花”};
int[]秩={2,3,4,5,6,7,8,9,10,11,12,13,14};
int cardnumber=0;
对于(int i=0;iPlayer2.CardRank)
{
System.out.println(“玩家1赢得这手牌”);
player1wincount++;
}
如果(Player1.CardRank
就在这里
TheDeck[cardnumber] = new TheCard(Rank[i], cardname);
您从未初始化过复选框。你可能想要像这样的东西
TheDeck = new TheCard[52];
在你开始把东西放入数组之前
值得注意的是,java的惯例是变量名应采用驼峰式大小写。所以“CardName”应该是CardName。只是一个惯例。替换:
TheCard[] theDeck = null;
与:
并将其移动到
卡
和套装
的声明下方TheCard[]theDeck=null代码>
不需要将其初始化吗?空指针异常是代码中试图访问/修改尚未初始化的对象的一种情况。它本质上意味着对象引用变量不指向任何地方,并且不引用任何内容或“null”。一个简单的例子是:
package au.com.copl;
public class Demo{
public static void main(String[] args) {
String d = null;
System.out.println(d.toString()); // d is un-initialized and is null
}
}
您还应该在main方法中使用new
:
TheCard[] OrderedDeck = BuildDeck();
应替换为:
TheCard[] OrderedDeck = new BuildDeck();
如果您希望编译器给您一个关于问题所在的大提示,请删除行@SuppressWarnings(“null”)
,然后您将被告知尝试访问null对象的确切位置。我假设您使用的是Eclipse,并且Eclipse建议使用@SuppressWarnings(“null”)
。删除该行并修复导致警告的代码。该警告表示存在问题。在知道后果之前,不要使用@SuppressWarnings
。警告试图阻止您收到的确切错误。非常感谢您的帮助!
TheCard[] OrderedDeck = new BuildDeck();