而循环
问题描述:
我通过所有的球员试图环和而循环
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...");
}
答
不知道你在这里试图做什么,但是你从同一个无限循环的方法中调用方法。因此堆栈溢出错误。
在你的其他条件中,你只是改变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));
}
请在此处提供一些背景信息。 –
反驳建议应该检查武器和角色是否与他们手中的牌手相匹配。 currenPlayerNumber是当前播放器的编号,播放器1将是1.对于游戏中的每个播放器,如果当前播放器编号不是6(播放器的末尾计数(改为
您递归调用:'refuteSuggestion (w,c,0)'这会让你陷入无休止的调用这个方法的循环,直到堆栈溢出 – alfasin