2013-04-08 174 views
1

空指針通常意味着在一個參數somwhere中有一個程序員錯誤,我的代碼是否可以查看以確保我沒有錯過任何明顯的東西?爲什麼會拋出NullPointerException?

這只是一個簡單的基於%的撲克機器人,很確定這裏是「THINKS」錯誤的地方。

public Action act(Set<Action> actions) { 
    Random generator = new Random(); 
    int roll = generator.nextInt(100) + 1; //gives number between 1 and 100 
    System.out.println("roll = " + roll); 
    Action myAction = null; 

    if (roll <= 30) { // RAISE 30% 
     if (actions.contains(Action.RAISE)) { 
      myAction = Action.RAISE; 
     } else if (actions.contains(Action.BET)) { 
      myAction = Action.BET; 
     } else if (actions.contains(Action.CALL)) { 
      myAction = Action.CALL; 
     } 
    } else if (roll > 30 && roll <= 90) { // CALL/CHECK 60% 
     if (actions.contains(Action.CALL)) { 
      myAction = Action.CALL; 
     } else if (actions.contains(Action.CHECK)) { 
      myAction = Action.CHECK; 
     } 
    } else if (roll > 90) { // FOLD 10% 
     if (actions.contains(Action.FOLD)) { 
      myAction = Action.FOLD; 
     } 

    return myAction; 
} 

}

編輯:

下面有添加的設置操作方法:

public Action act(Set<Action> actions, int minBet, int currentBet) { 
    action = client.act(actions); 
    switch (action) { 
     case CHECK: 
      break; 
     case CALL: 
      betIncrement = currentBet - bet; 
      if (betIncrement > cash) { 
       //TODO: All-in with partial Call. 
       betIncrement = cash; 
      } 
      cash -= betIncrement; 
      bet += betIncrement; 
      break; 
     case BET: 
      betIncrement = minBet; 
      if (betIncrement >= cash) { 
       //TODO: All-in with partial Bet. 
       betIncrement = cash; 
      } 
      cash -= betIncrement; 
      bet += betIncrement; 
      raises++; 
      break; 
     case RAISE: 
      currentBet += minBet; 
      betIncrement = currentBet - bet; 
      cash -= betIncrement; 
      bet += betIncrement; 
      raises++; 
      break; 
     case FOLD: 
      hand.removeAllCards(); 
      break; 
    } 
    return action; 
} 

行動方法從接口類繼承Client.java:

Action act(Set<Action> allowedActions); 

很多 謝謝!

SOLUTION:

當我嘗試和運行兩個自相同機器人有衝突的地方導致空指針。當我使用任何兩種不同的機器人時,它可以正常播放,沒有錯誤。

+9

而引發異常的行是...? (「動作」的內容是什麼?) – 2013-04-08 21:32:04

+1

如果函數_returns_' null',可能是因爲roll低於90,並且沒有任何嘗試的動作可用。作爲一個方面說明,你永遠不會驗證'FOLD'是否可用。 – 2013-04-08 21:36:08

+0

需要更多的片段。 – iamnotmaynard 2013-04-08 21:39:03

回答

2

不清楚你在哪裏得到NPE但我會賭空的輸入參數

Set<Action> actions 
0

一個NullPointerException,不妨發生,如果你試圖調用一個方法,在null變量。這可能就是這種情況。

如果這沒有幫助,請花些時間發佈引發異常的確切行。

0

您能檢查if(null == actions)嗎?這將提供一些見解。

相關問題