我收到了NullPointerException,因为我尝试从尚未初始化的对象中检查某个值,值仍为null
值。这样做的原因是我只在必要时等待初始化对象,如果没有必要,我想我不需要浪费更多的内存空间。
我收到此异常,因为player2.getHandTotal()
尚未初始化,因此没有从中提取值的方法。现在,我应该如何制定我的while循环,以便在检查值时不抛出此异常?我试图抛出(player2 != null && dealer.getHandTotal() <= player2.getHandTotal())
并希望对其进行短路检查,但这不起作用......
player2
意味着当一张牌split
用于同一牌手的2手牌时将使用的牌。如果没有split
的要求,例如没有2张牌或牌不同,那么我不需要player2
对象进行初始化。
我真的不想加倍我的代码!这样做的原因是我需要加倍大量代码!即使没有必要,我最好初始化player2
对象!
如何解决这个问题?
while(dealer.getHandTotal() <= 15 &&
(dealer.getHandTotal() <= player.getHandTotal() ||
dealer.getHandTotal() <= player2.getHandTotal()))
{
deck = drawFromDeck(deck, dealer);
}
答案 0 :(得分:1)
附加条件 player2!= null 应该有效。还有什么东西会抛出NullPointerException吗?在进行以下更改后,您能告诉我们堆栈跟踪吗?
while (dealer.getHandTotal() <= 15 &&
(dealer.getHandTotal() <= player.getHandTotal() ||
(player2 != null && dealer.getHandTotal() <= player2.getHandTotal())))
{
deck = drawFromDeck(deck, dealer);
}
答案 1 :(得分:0)
如果在进入循环之前它是否为空,你能检查所有值吗?比如说这个if(object1 != null && object2 !=null )
或者它是原始类型if(value == -1 || value == 0)`。因此,在进入循环之前,您需要对所有值进行验证
答案 2 :(得分:0)
如果您不确定它不会为空,则不能在条件语句中使用player2.getHandTotal
。
当player2为null时,表示满足第一个条件,但这也意味着第二个条件将抛出NullPointerException
,因为你在那里使用同一个引用方法。
我建议在进入while循环之前检查一些值是否为null。
答案 3 :(得分:0)
我知道你不想浪费内存空间,但我不知道这是否可行。可能是这样,但我更喜欢在循环周围或其内部使用try-catch块来捕获NullPointerException。
try{
while(dealer.getHandTotal() <= 15 &&
(dealer.getHandTotal() <= player.getHandTotal() ||
dealer.getHandTotal() <= player2.getHandTotal()))
{
deck = drawFromDeck(deck, dealer);
}
} catch (NullPointerException npe){
// do something
}
我希望这会有所帮助
答案 4 :(得分:0)
播放器2意味着当卡片分开时将使用的手牌 为同一个玩家分成两只手。如果没有要求 分裂如没有2张卡或卡等级不一样然后我没有 需要初始化player2对象。
所以你的班级结构不正确:玩家(和经销商)应该有一个或多个牌,条件应该是这样的:
while(dealer.getHand().getTotal() <= 15 &&
dealer.getHand().getTotal() <= getMaximumHandTotal()) {
...
}
private int getMaximumHandTotal() {
int max = -1;
for(Hand hand : player.getHands()) {
if(hand.getTotal() > max) { max = hand.getTotal(); }
}
return max;
}
然后在将来当你想添加额外的玩家时,你只需要在所有玩家的getMaximumHandTotal()中添加一个额外的循环。