Java 为什么对象数组会出现空指针异常?

Java 为什么对象数组会出现空指针异常?,java,object,nullpointerexception,Java,Object,Nullpointerexception,我想创建一个Card类型的ArrayList 我的卡片类将有两个实例变量,分别是Suit类型的Suit和rank类型的String。类型Suit是它自己的子类,有两个实例变量,分别是String类型的suitTitle和Boolean类型的selected 我的卡片课看起来像这样 public class Card { public Suit suit; public String rank; public class Suit { public String suitTitle; publi

我想创建一个Card类型的ArrayList

我的卡片类将有两个实例变量,分别是Suit类型的Suit和rank类型的String。类型Suit是它自己的子类,有两个实例变量,分别是String类型的suitTitle和Boolean类型的selected

我的卡片课看起来像这样

public class Card {
public Suit suit;
public String rank;
public class Suit {
public String suitTitle;
public Boolean selected;
Suit[] suit = new Suit[4];
suit[0].suitTitle = "Spades";
suit[1].suitTitle = "Hearts";
suit[2].suitTitle = "Clubs";
suit[3].suitTitle = "Diamonds";
使用构造函数和所有明显的getter和setter

我的西装课看起来像这样

public class Card {
public Suit suit;
public String rank;
public class Suit {
public String suitTitle;
public Boolean selected;
Suit[] suit = new Suit[4];
suit[0].suitTitle = "Spades";
suit[1].suitTitle = "Hearts";
suit[2].suitTitle = "Clubs";
suit[3].suitTitle = "Diamonds";
使用构造函数和所有明显的getter和setter

当创建卡第一,我需要一个数组的西装类型,将看起来像这样

public class Card {
public Suit suit;
public String rank;
public class Suit {
public String suitTitle;
public Boolean selected;
Suit[] suit = new Suit[4];
suit[0].suitTitle = "Spades";
suit[1].suitTitle = "Hearts";
suit[2].suitTitle = "Clubs";
suit[3].suitTitle = "Diamonds";
但在尝试输入值时,如果执行此操作,则会出现nullpointer异常:

Suit[] suit = new Suit[4];
。。。您正在创建一个足以容纳4个
Suit
对象的数组,但数组中的每个对象都为空

因此,您需要执行以下操作:

Suit[] suit = new Suit[4];

// put actual Suit objects in the array
suit[0] = new Suit();
suit[1] = new Suit();
suit[2] = new Suit();
suit[3] = new Suit();

suit[0].suitTitle = "Spades";
suit[1].suitTitle = "Hearts";
suit[2].suitTitle = "Clubs";
suit[3].suitTitle = "Diamonds";

我建议您不要使用suit类,而是将suit作为数字1-4存储在card类中,并使用getSuit()函数返回字符串。如果你以这样一种方式订购西装,你将很容易比较它们,因为更有价值的西装是一个更大的数字,因为它们已经是整数了

String getSuit(){
    if(suit == 1){
        return "the suit";
    }
    ...
}

您正在初始化suit数组,但对于数组suit对象的每个位置,suit对象都为null,因此您将获得NullPointerException。 请检查以下内容:

public class Card {
    public Suit[] suit;
    public String rank;
}

public class Suit {
    public String suitTitle;
    public Boolean selected;
}

public class TestCard {
    public static void main(String[] args) {
       Suit[] suitList = new Suit[4];
       Suit suit1 = new Suit();
       suit1.suitTitle = "Spades";
       suitList[0] = suit1;
       Suit suit2 = new Suit();
       suit2.suitTitle = "Hearts";
       suitList[1] = suit2;
       Suit suit3 = new Suit();
       suit3.suitTitle = "Clubs";
       suitList[2] = suit3;
       Suit suit4 = new Suit();
       suit4.suitTitle = "Diamonds";
       suitList[3] = suit4;
       Card card = new Card();
       card.rank = "xyz";
       card.suit = suitList;
   }
}

也可以考虑使用<代码> EnUM <代码> > <代码>诉讼> <代码>。“我建议你把这套衣服存储为1-4号”-不。这是什么意思。@ Turn85在许多纸牌游戏中,玩家希望比较卡,如果它们有相同的值,那么就比较了很多次。如果存储为整数,则便于比较。@Turing85从来不知道存在这种情况。这似乎是一个很好的解决方案。不鼓励只使用代码的答案。相反,添加问题的描述和代码如何解决问题的解释。--“
String-args[]
”-在Java中,按照惯例,数组括号写在类型后面,而不是名称后面:
String[]args
。谢谢。我更新了。