2016-08-05 5 views
0

Я пытаюсь перебрать всех игроков иошибка переполнения стека во время цикла

1> Выход линии
2> Создать объект

, основанный на определенных условиях. Но я получаю ошибку Stackoverflow.

public void refuteSuggestion(Weapon w, Character c, int currentPlayerNumber) { 
    for (Player p : game.getPlayers()) { 
     if(currentPlayerNumber != 6) { 
      if (p.getNum() == currentPlayerNumber + 1) { 
       Set<Card> cardSet = new HashSet<>(); 
       cardSet.addAll(p.getPlayerCards()); 
       Card card = (Card) getRandomObject(cardSet); 
       System.out.println(card.getName(0)); 
      } else { 
       refuteSuggestion(w, c, currentPlayerNumber + 1); 
      } 
     } 
     else{ 
      refuteSuggestion(w, c, 0); 
     } 

    } 
    System.out.println("No one refuted..."); 
} 
+0

Пожалуйста, предоставьте здесь некоторый контекст. –

+0

refutSuggestion должен проверить, совпадает ли оружие и персонаж с карточкой игрока в руке. currenPlayerNumber является номером currentPlayer, игрок 1 будет 1. для каждого Игрока в игре, если currentPlayerNumber не равен 6 (конец игрока подсчитывает (вместо этого вместо этого вместо <= 6) проверьте, не указан ли номер игрока это currentPlayerNumber + 1 (следующий игрок), если он есть, делайте что-нибудь, иначе, recurse. Если currentPlayerNumber == 6, перезапустите с самого начала. Продолжайте проверять, пока у игроков нет карты. @MadPhysicist –

+3

вы вызываете рекурсивно: 'refuteSuggestion (w, c, 0) ', который помещает вас в бесконечный цикл вызовов этого метода до тех пор, пока стек не переполнится – alfasin

ответ

1

Не уверен, что вы пытаетесь сделать здесь, но вы вызываете метод из того же метода, который является бесконечным циклом. Следовательно, ошибка переполнения стека.

В ваших других условиях вы изменяете значение currentPlayerNumber, так что просто делайте это вместо того, чтобы вызывать одну и ту же функцию после изменения текущего слоя.

Вы также можете создать отдельную функцию для обработки кода внутри, если это логично, если это упрощает понимание.

public void refuteSuggestion(Weapon w, Character c, int currentPlayerNumber) { 
    for (Player p : game.getPlayers()) { 
     if(currentPlayerNumber != 6) { 
      if (p.getNum() == currentPlayerNumber + 1) { 

        nextFunction(p); 
      } else { 
       currentPlayerNumber += 1; 
      } 
     } 
     else{ 
      currentPlayerNumber = 0; 
     } 

    } 
    System.out.println("No one refuted..."); 
} 

public void nextFunction(Player p){ 
    Set<Card> cardSet = new HashSet<>(); 
    cardSet.addAll(p.getPlayerCards()); 
    Card card = (Card) getRandomObject(cardSet); 
    System.out.println(card.getName(0)); 
    } 
Смежные вопросы