有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在构造函数中将数组用作参数时出现java空指针错误

我正在攻读AP Comp Sci,并在实验室“elevens”工作。我要做的就是实例化“Deck”类的一个对象,我的构造函数抛出一个NullPointerError。在做了一次打印检查之后,我发现第一个索引被正确地找到了,是第二个索引抛出了错误。为了解决这个问题,我需要在Deck类或主方法中更改什么

public Card(String cardRank, String cardSuit, int cardPointValue) 
{
    suit = cardSuit;
    rank = cardRank;
    pointValue = cardPointValue;
}

private ArrayList<Card> cards;

public Deck(String[] ranks, String[] suits, int[] values) 
{
    for(int i =0; i < suits.length; i++)
    {                
        cards.add(new Card(ranks[i], suits[i], values[i]));
        size++;
    }
}

public static void main(String[] args) 
{
    String [] suits = new String [] {"Spades", "Hearts", "Diamonds"};
    String [] ranks = new String [] {"Queen", "King", "Ace"};
    int [] points = new int [] {10, 10, 11};
    Deck deck = new Deck(ranks, suits, points);
}

共 (2) 个答案

  1. # 1 楼答案

    cards尚未实例化,因此它仍然是null,当您尝试与它交互时,它将导致NPE

    最简单的解决方案(考虑到我们应该尽量减少代码中空值的出现):

    private ArrayList<Card> cards = new ArrayList<>();
    
  2. # 2 楼答案

    当你说private ArrayList<Card> cards;时,它相当于

    private ArrayList<Card> cards = null;
    

    这就是为什么cards在构造函数中是null。将其更改为1

    private List<Card> cards = new ArrayList<>();
    

    或者,在for循环之前添加一个cards = new ArrayList<>();(在构造函数中)

    同样,你似乎同时错过了球杆和插孔

    String [] suits = {"Clubs", "Spades", "Hearts", "Diamonds"};
    String [] ranks = {"Jack", "Queen", "King", "Ace"};
    

    1并且更喜欢编程而不是List接口