我是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”值的问题,这会导致方法出错呼叫。
答案 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。