而循环

问题描述:

我通过所有的球员试图环和而循环

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

反驳建议应该检查武器和角色是否与他们手中的牌手相匹配。 currenPlayerNumber是当前播放器的编号,播放器1将是1.对于游戏中的每个播放器,如果当前播放器编号不是6(播放器的末尾计数(改为

+3

您递归调用:'refuteSuggestion (w,c,0)'这会让你陷入无休止的调用这个方法的循环,直到堆栈溢出 – alfasin

不知道你在这里试图做什么,但是你从同一个无限循环的方法中调用方法。因此堆栈溢出错误。

在你的其他条件中,你只是改变currentPlayerNumber的值,所以只需要改变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)); 
    }