Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.NullPointerException?_Java - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.NullPointerException?

“线程中的异常”;“主要”;java.lang.NullPointerException?,java,Java,我是java编程的初学者。我试图重新创建一个简化版的纸牌游戏战争。我运行了下面发布的程序,它返回时出现了以下错误: 线程“main”java.lang.NullPointerException中的异常 在cardgame.BuildDeck(cardgame.java:36) 在cardgame.main(cardgame.java:60) 我一直试图通过研究自己解决这个问题,但我无法解决它。我想知道是否有人能帮我。如果你需要关于我的计划的任何其他信息,请直接询问。提前谢谢 -FGxMatta

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