java - 线程 "main"java.lang.NullPointerException 中的异常?

标签 java

<分区>

我是 Java 编程的初学者。我正在尝试重新创建纸牌游戏 war 的简化版本。我运行了下面发布的程序,但返回此错误:

线程“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");
}
}

最佳答案

替换:

TheCard[] theDeck = null;

与:

TheCard[] theDeck = new TheCard[Cards.length * Suits.length];

并将其移动到CardsSuits 的声明下方。

关于java - 线程 "main"java.lang.NullPointerException 中的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197026/

相关文章:

java - 托盘图标.displaymessage文本大小java

java - Eclipse 中的 Tomcat : It runs but time out during startup anyway

java - 对多维数组进行排序

java - 无法将 Maven 依赖项添加到远程调试配置的“源”选项卡

java - 在身份验证之前重写入站 Java 服务器授权 header

java - 有没有一种好的方法可以在其构造函数中创建带有一些参数的新对象,并在其中注入(inject) CDI bean?

java - 每天在一天中的特定时间运行 Web 服务(从 Tomcat 参数获取时间)

java - 电子邮件地址中的撇号引发异常

java - JLayer 暂停和恢复

java - 为什么 volatile 读总是无竞争的?