我目前正在学习java的入门级编程课程。我有一个函数,可以从pokemon列表中随机选择两个不同的pokemon。起初,代码不起作用,只是无限次地重复执行while循环。我在println语句中添加了一个用于调试的语句,突然间,这个函数就完美地工作了。函数如下所示:
public boolean addRandomPokemon()
{
boolean runCheck = true;
boolean canUse = true;
while (runCheck)
{
int rand = Randomizer.nextInt(3);
for (int i = 0; i < pokeDeck.size(); i++)
{
System.out.println();
if(pokeDeck.get(i).getName().equals(POKEMON_NAMES[rand]))
{
canUse = false;
}
}
if (canUse)
{
Pokemon poke = new Pokemon(POKEMON_NAMES[rand]);
pokeDeck.add(poke);
runCheck = false;
}
}
return true;
}
其中整数rand是一个随机整数(0,3)。有谁能解释为什么会发生这种情况,并为这个问题提供更好的解决方案吗。简单的解释是首选,因为我不是很有经验的编程。谢谢!
2条答案
按热度按时间yuvru6vn1#
我认为system.out.println()对您的问题没有影响。此语句即将向控制台打印任何值。还要确保pokedeck在pokemon\u names数组中不包含任何pokemon,因为它会将canuse更改为false,那么运行检查将始终保持true。
排列代码:
q5iwbnjs2#
当pokedeck至少有一个元素并且满足if条件时,将canuse布尔值设置为false,这样就不再在第二个if中输入
所以你的runcheck布尔值总是真的,所以循环是无限的。
您可以修复此行为并添加else语句,如下所示:
所以你有另一个机会在下一个循环中退出你的循环。
这个
println
在无限循环中没有效果