空指針通常意味着在一個參數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:
當我嘗試和運行兩個自相同機器人有衝突的地方導致空指針。當我使用任何兩種不同的機器人時,它可以正常播放,沒有錯誤。
而引發異常的行是...? (「動作」的內容是什麼?) – 2013-04-08 21:32:04
如果函數_returns_' null',可能是因爲roll低於90,並且沒有任何嘗試的動作可用。作爲一個方面說明,你永遠不會驗證'FOLD'是否可用。 – 2013-04-08 21:36:08
需要更多的片段。 – iamnotmaynard 2013-04-08 21:39:03