Java: 具有多个条件的 do-while 循环

3

我正在尝试使用do-while循环在Java中创建剪刀石头布游戏。计算机将随机选择1,用户进行选择。退出条件是如果用户赢了两次(userWin)或计算机赢了两次(compWin)。如果平局,双方计数器均不增加。

// Scissors, paper, stone game. Best of 3.
// scissors = 0; paper = 1; stone = 2;
import java.util.Scanner;
public class Optional2 {

    public static void main(String[] args) {

            int userWin = 0;
            int compWin = 0;

            do {
                //comp choice
                int comp = 1;       //TEST CASE
            //  int comp = (int) (Math.random() * (2 - 0 + 1) + 0);

                //user choice
                System.out.println("0 for scissors, 1 for paper, 2 for stone");
                Scanner sc = new Scanner(System.in);
                int user = sc.nextInt();

                    //Draw
                    if (comp == user) {
                        System.out.println("Draw");
                    //Win =)
                    } else if (comp == 0 && user == 2 || comp == 1 && user == 0 || 
                                comp == 2 && user == 1) {
                        System.out.println("WIN!");
                        userWin++;
                    //Lose =(
                    } else {
                        System.out.println("Lose =(");
                        compWin++;
                    }
            } while (compWin < 2 || userWin < 2);

            System.out.println("You won " + userWin + " times!");   
    }
}

对于变量int comp而言,应该是随机的,但是出于方便测试,我将其设置为1(paper)。
然而,目前只有当满足第一个条件时才会退出循环。如果使用||运算符来使第二个条件成立时也退出循环,但实际上循环仍然会继续。
例如,如果我写成while (userWin < 2 || compWin < 2),那么当用户胜利两次时就会退出循环,但是当电脑胜利两次时却不会退出循环。如果我写成while (compWin < 2 || userWin < 2),那么当电脑胜利两次时就会退出循环,但是当用户胜利两次时却不会退出循环。
我尝试改成while ((userWin < 2) || (compWin < 2)),但并没有起到作用。

用“&&”替换“||”,其中“||”表示“或”。 - Alex Salauyou
条件语句不是用来控制退出循环,而是用来控制保持循环。如果你不了解它们的本质,很难理解。只要计算机或用户获胜次数少于2次,你就会一直保持在循环中,所以如果其中任何一个获得两次胜利,那么循环就结束了。 - apokryfos
你是否意识到,你编写的 while 循环条件只有在 compWinuserWin 都大于等于 2 时才停止? - Alderath
你能否在循环内部使用“if”语句处理条件,并切换布尔变量作为退出条件呢? - exceptional exception
3个回答

4

您应该使用 && 替代:


while (userWin < 2 && compWin < 2);

这是因为只要用户或计算机没有连续获胜,您就希望保持在循环中。
userWin < 2 && (=AND) compWin < 2

这意味着:只要用户和计算机都没有连续获得2次胜利,就会保持循环。换句话说,如果用户或计算机中的任何一方获得了两次连续胜利,则退出循环。

4

但是即使条件为真,循环仍然一直进行

while循环会一直循环,只要条件保持true

我认为问题在于你应该重写条件:

while ((userWin < 2) && (compWin < 2))

使用&&代替||。现在,while循环类似于:“只要用户没有赢得两次或更多次,计算机也没有赢得两次或更多次,就一直循环。


0
尝试使用“&&”进行替换。您需要同时小于2才能保持循环进行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接