2013-04-08 2 views
1

Нулевой указатель обычно означает, что ошибка программистов в параметре somwhere, может ли мой код выглядеть так, чтобы я не пропустил ничего очевидного?Почему это вызывает исключение NullPointerException?

Это просто бот-бот на основе%, довольно уверен, что здесь «ДУМАЕТ» ошибка.

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; 
} 

}

РЕДАКТИРОВАТЬ:

Heres добавленные установлены методы Действия:

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); 

Многие благодаря!

РЕШЕНИЕ:

Когда я пытаюсь запустить два одинаковых бота против себя он имеет конфликт где-то вызывает нулевой указатель. Когда я использую любые два разных бота, он отлично работает без ошибок.

+9

И линия, которая выбрасывает исключение ...? (И что такое содержимое 'actions'?) –

+1

Если эта функция _returns_' null', это может быть связано с тем, что рулон меньше 90 и ни одно из попыток не доступно. В качестве дополнительной заметки вы никогда не проверяете наличие «FOLD». –

+0

Нужно больше фрагментов. – iamnotmaynard

ответ

2

не ясно, где вы получаете NPE, но я бы поставил на нулевой входной параметр

Set<Action> actions 
0

NullPointerException, а также может произойти, если вы пытаетесь вызвать метод, на null переменной. Возможно, это так.

Если это не поможет, найдите время, чтобы опубликовать точную строку, которая выдает исключение.

0

Вы можете проверить if(null == actions)? Это обеспечило бы некоторое понимание.

Смежные вопросы