3

我是 Java 的初学者,我一直在编写测试代码来应用我读到的一些概念。所以,我想创建一个类来描述扑克牌。卡片类包含描述套件和值的字段(所有 4 个套件为 1 - 13)。如您所见,这个类的创建非常简单——

public class Card {
    private String suite; 
    private int cardValue;

    Card(String s, int cV){
    this.suite = s;
    this.cardValue = cV;
    }

    public String getSuite(){
    return this.suite;
    }

    public int getCardValue(){
    return this.cardValue;
    }
}

我创建了另一个类来测试这个类,并将 52 张卡片添加到一个数组中(我有另一个类将处理 52 张卡片组,但这在我的问题的上下文中并不重要)。这个名为CardTest的类包含 main 方法。我创建了一个 for 循环,将所有内容附加到卡片组数组中,但是当我想要遍历卡片组并打印出卡片值(套件和值)时,我的问题就出现了。我收到 NullPointException 错误。这是 cardTest 类:

public class CardTest {
    public static void main(String[] args){
        Card[] temp = new Card[52];
        for (int i = 0; i <12; i++){
            temp[i] = new Card("Spade", i + 1);
            temp[i+13] = new Card("Club", i + 1);
            temp[i+26] = new Card("Diamond", i + 1);
            temp[i +39] = new Card("Heart", i + 1);
        }
        for (int i = 0; i < 52; i++){
            System.out.println(temp[i].getSuite());
        }
    }
}

我试图搜索有关此类错误的问题,但我收集到的唯一一件事是 Card 对象被设置为默认的“null”值存在问题,这会在方法调用中产生错误。

4

4 回答 4

3

您用于创建卡片的 for 循环是错误的,您只创建 12*4=48 张卡片,将 temp[12]、temp[25]、temp[38] 和 temp[51] 留空,试试

    for (int i = 0; i <13; i++){
        temp[i] = new Card("Spade", i + 1);
        temp[i+13] = new Card("Club", i + 1);
        temp[i+26] = new Card("Diamond", i + 1);
        temp[i +39] = new Card("Heart", i + 1);
    }
于 2012-09-08T00:52:40.860 回答
3

显然,您没有向Card数组中添加 52 个实例(您为 12 次迭代中的每一次添加 4 个,12 * 4 = 48 != 52)。因此,当您遍历整个数组时,某些值将不可避免地是null(请记住,对象数组最初仅包含nulls)。循环直到i < 13应该解决这个问题。

于 2012-09-08T00:52:54.363 回答
1

问题出在这里:

        temp[i+13] = new Card("Club", i + 1);

它永远不会是 12,这就是你得到空指针异常的原因。

于 2012-09-08T00:52:22.733 回答
0

问题是您只将temp数组填充到索引 50 (11 + 39),第二个循环尝试访问索引 51。第一个循环的上限应该是 13,而不是 12。

于 2012-09-08T00:52:25.273 回答