即使布尔值变为假,我的while循环也不会结束,我该如何解决?

时间:2019-03-31 09:07:34

标签: java while-loop

我正在编写一个有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再转一圈并产生了负数的石头。

2 个答案:

答案 0 :(得分:0)

您可以添加:

if(!(stone > 0))
        break;
在您的while循环结束时

。 这样,当循环结束时没有任何结石时,它应该停止。

答案 1 :(得分:0)

您的问题是

if(turn==2*n-1&&stone>0);

if(turn==2*n&&stone>0);

是空的if语句(意思是:如果条件为true,则什么都不做)。

这些行末尾的分号是空语句-因此,始终执行以下块(您在其中询问每个玩家要删除多少块石头)。

删除这两个分号,您无需更改代码的其余部分。