我正在编写一个有2个玩家轮流玩的游戏的代码,但是即使在布尔值变为假的情况下,while循环在某些情况下仍会继续运行。
这是while循环部分出现问题
while (stone>0)
// this should work only when the num of stones are bigger than 0
{
if(turn==2*n-1&&stone>0);
//if it's odd num turn, it's player1's turn
{
System.out.println(p1.getName()+"'s turn - remove how many? : ");
int remove = keyboard.nextInt();
s.setStone(remove);
stone = stone-s.removeStone();
System.out.print(stone+"stones left");
for (i=0;i<stone;i++)
System.out.print("*");
}
//printing asterisk mark to the num of stone left
System.out.println();
if(turn==2*n&&stone>0);
//if it's even num turn, it's player2's turn
{
System.out.println(p2.getName()+"'s turn - remove how many? : ");
int remove = keyboard.nextInt();
s.setStone(remove);
stone = stone-s.removeStone();
System.out.print(stone+"stones left");
for (i=0;i<stone;i++)
System.out.print("*");
}
System.out.println();
}
所以,我打算在剩余的石头数变为0时完成此循环,当player2删除所有剩余的石头(它打印0块石头,仅打印剩余的东西)时,它起作用,但是当玩家1时,删除所有剩余的石头,那么就会出现一个错误,例如它先打印“ 0块剩余的石头”,然后依次显示“ player2”-删除多少?
我写了while-循环,当石头数变为0时结束,但是当玩家1使其变为0时,循环并没有结束,使玩家b再转一圈并产生了负数的石头。
答案 0 :(得分:0)
您可以添加:
if(!(stone > 0))
break;
在您的while循环结束时。 这样,当循环结束时没有任何结石时,它应该停止。
答案 1 :(得分:0)
您的问题是
if(turn==2*n-1&&stone>0);
和
if(turn==2*n&&stone>0);
是空的if语句(意思是:如果条件为true,则什么都不做)。
这些行末尾的分号是空语句-因此,始终执行以下块(您在其中询问每个玩家要删除多少块石头)。
删除这两个分号,您无需更改代码的其余部分。