0

我收到 NullPointerException 是因为我尝试从尚未初始化的对象中检查一些值,并且值仍然是null值。这样做的原因是我只在必要时等待初始化对象,当不需要时我认为我不需要浪费更多的内存空间。

我收到此异常是因为player2.getHandTotal()尚未初始化,因此没有方法可以从中提取值。现在,当我检查一个值时,我应该如何制定我的 while 循环以不抛出这个异常?我试图抛出(player2 != null && dealer.getHandTotal() <= player2.getHandTotal())并希望短路检查它,但这不起作用......

意思是当牌为同一玩家的 2 手player2时将使用的手。split如果没有要求,split例如没有 2 张卡片或卡片等级不一样,那么我不需要player2初始化对象。

我真的不想加倍我的代码!这样做的原因是我必须加倍很多代码!player2即使没有必要,我也会更好地初始化对象!

如何解决这个问题?

while(dealer.getHandTotal() <= 15 && 
        (dealer.getHandTotal() <= player.getHandTotal() || 
        dealer.getHandTotal() <= player2.getHandTotal()))
{
    deck = drawFromDeck(deck, dealer);
}
4

5 回答 5

1

添加的条件player2 != null应该可以工作。还有什么东西会抛出 NullPointerException 吗?进行以下更改后,您能否向我们展示堆栈跟踪?

while (dealer.getHandTotal() <= 15 && 
        (dealer.getHandTotal() <= player.getHandTotal() || 
        (player2 != null && dealer.getHandTotal() <= player2.getHandTotal())))
{
    deck = drawFromDeck(deck, dealer);
}
于 2012-12-07T11:12:52.610 回答
0

player2 的意思是当牌被分成 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() 中为所有玩家添加一个额外的循环。

于 2012-12-07T12:15:06.957 回答
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
}

我希望这有帮助

于 2012-12-07T10:45:13.687 回答
0

你能在进入循环之前检查所有值是否为空吗?像这样说if(object1 != null && object2 !=null )或者如果它是原始类型 if(value == -1 || value == 0)`。因此,在您进入循环之前,您必须对所有值进行验证

于 2012-12-07T10:39:33.797 回答
0

player2.getHandTotal当您不确定它不会为空时,您不能在条件语句中使用。

当 player2 为 null 时,这意味着满足第一个条件,但也意味着第二个条件将抛出 a NullPointerException,因为您在那里使用相同的引用和方法。

我建议在进入 while 循环之前检查一些值是否为空。

于 2012-12-07T10:42:02.453 回答