Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我';我不会去引用任何';是指向空的吗?_Java_Nullpointerexception - Fatal编程技术网

Java 当我';我不会去引用任何';是指向空的吗?

Java 当我';我不会去引用任何';是指向空的吗?,java,nullpointerexception,Java,Nullpointerexception,我知道,当您尝试取消引用指向空的内容时(即null),会出现NullPointerException) 1) 但是Cards类型的card由于方法deckOfCards.deal()而指向某个对象,所以这不是问题所在,必须是方法中的某个对象 2) 在setHand_1by1()中,hand[计数器]为卡片类型。我所做的只是在else块中指向包含Cards类型数据的有效内存 为什么会出现NullPointerException错误 编辑: 仅显示我如何创建我的播放器: class Hand {

我知道,当您尝试取消引用指向空的内容时(即
null
),会出现
NullPointerException

1) 但是
Cards
类型的
card
由于方法
deckOfCards.deal()
而指向某个对象,所以这不是问题所在,必须是方法中的某个对象

2) 在
setHand_1by1()
中,
hand[计数器]
为卡片类型。我所做的只是在
else
块中指向包含
Cards
类型数据的有效内存

为什么会出现
NullPointerException
错误

编辑: 仅显示我如何创建我的
播放器

class Hand
 {
     private Cards[] hand=new Cards[5];
     private int counter;
     
     //no constructor, just a setter.
     public void setHand_1by1(Cards card)
     {
         if(counter>=hand.length)
         {
             System.out.printf("Hand is full");
         }
         else
         {
             hand[counter]=card;
             counter++;
         }
        
     }
//some code...
}

您需要
玩家[playernum]
中的
手牌
对象引用,才能在其上调用
手牌
方法

您创建的
players
数组(类型为
Hand
)实际上只是一个可以容纳
Hand
(或其子类)对象引用的数组。最初,所有引用都是
null
,您需要自己填充它们


关于对象数组注释,请注意,从来没有对象数组,只有对象引用数组。引用指向对象实际驻留的位置(通常是堆)。

关于
players[…]
?您可以访问
players
。并且该数组或
玩家[playerNum]
访问的元素之一为空。但是您没有显示如何填充该数组,因此无法确定。
players
属于
Hand
类型。我正在使用
setHand_1by1
方法填充它,并在第一次尝试时得到错误,在
setHand_1by1
中,您正在填充每个
Hand
Card
数组,但不是包含所有
手牌的
播放器
数组。显示该代码。您只创建
玩家
数组,但从不在其中放置任何
对象。所以所有元素仍然是
null
class Hand
 {
     private Cards[] hand=new Cards[5];
     private int counter;
     
     //no constructor, just a setter.
     public void setHand_1by1(Cards card)
     {
         if(counter>=hand.length)
         {
             System.out.printf("Hand is full");
         }
         else
         {
             hand[counter]=card;
             counter++;
         }
        
     }
//some code...
}
Hand[] players=new Hand[NUMPLAYERS];