为什么我得到一个对象数组的空指针异常? [重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我想创建一个Card类型的ArrayList

我的Card类将有2个类型为Suit的实例变量,名为suit,类型为String,称为rank。 Suit类型是它自己的子类,有2个类型为String的实例变量,名为suitTitle,类型为Boolean,名为selected。

我的卡片类看起来像这样

public class Card {
public Suit suit;
public String rank;

使用构造函数和所有明显的getter和setter

我的西装类看起来像这样

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

使用构造函数和所有明显的getter和setter

创建卡片时首先我需要一个类似于此的套装类型

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

但是当试图输入值时,我得到一个nullpointer异常

java object nullpointerexception
3个回答
3
投票

当你这样做:

Suit[] suit = new Suit[4];

...您正在创建一个足以容纳4个Suit对象的数组,但数组中的每个对象都为null。

因此,您需要这样做:

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";

-1
投票

您正在初始化套装数组但是对于数组套装对象的每个位置都为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;
   }
}

-2
投票

我建议您将套装存储为卡类中的数字1-4,并且具有返回String的getSuit()函数,而不是具有套装类。如果您以更有价值的西装是更大的数字来订购它们,您将能够轻松地比较西装,因为它们已经是整数。

String getSuit(){
    if(suit == 1){
        return "the suit";
    }
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.