简单卡类的空点异常错误

时间:2012-09-08 00:47:07

标签: java nullpointerexception

我是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循环,将所有内容附加到deck数组,但是当我想循环遍历套牌并打印出卡值(套件和值)时,就会出现问题。我收到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 个答案:

答案 0 :(得分:3)

你创建卡片的for循环是错误的你只装箱12 * 4 = 48张牌,留下temp [12],temp [25],temp [38]和temp [51] null,试试

    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);
    }

答案 1 :(得分:3)

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

答案 2 :(得分:1)

问题在于:

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

永远不会是12,这就是你得到nullpointer异常的原因。

答案 3 :(得分:0)

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