2016-08-05 104 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

反駁建議應該檢查武器和角色是否與他們手中的牌手相匹配。 currenPlayerNumber是當前播放器的編號,播放器1將是1.對於遊戲中的每個播放器,如果當前播放器編號不是6(播放器的末尾計數(改爲<= 6),則檢查播放器的編號是當前播放器號碼+ 1(下一個播放器),如果是,做東西,否則,遞歸。如果當前播放器數字== 6,從一開始遞歸。繼續檢查,直到沒有玩家擁有該卡。@MadPhysicist –

+3

您遞歸調用:'refuteSuggestion (w,c,0)'這會讓你陷入無休止的調用這個方法的循環,直到堆棧溢出 – alfasin

回答

1

不知道你在這裏試圖做什麼,但是你從同一個無限循環的方法中調用方法。因此堆棧溢出錯誤。

在你的其他條件中,你只是改變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)); 
    }