繁体   English   中英

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

[英]Java: Do-while loop with multiple conditions

我正在尝试使用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(纸张)以便于测试。

但是,目前只有第一个条件才会退出循环,如果它变为真。 我期待第二个条件退出循环,如果它与||变为真 运算符,但循环只是保持循环,即使它成为现实。

即。 如果我放入while (userWin < 2 || compWin < 2) ,如果用户获胜两次则退出,但如果计算机获胜两次则退出。 如果我把while(compWin <2 || userWin <2),它将在计算机获胜两次时退出,但如果用户赢了两次则不退出。

我尝试将其更改为while ((userWin < 2) || (compWin < 2))但它不起作用。

您应该使用&&代替:

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

这是因为只要没有用户或者comp获得2次连续胜利,你就想进入循环

那被翻译成了

userWin < 2 && (=AND) compWin < 2

这意味着:只要双方用户和补偿已经连续低于2胜,留在循环。

或者换句话说,正如你所说的那样:如果用户或者任何一个获得连续两次胜利,则从循环中退出

但即使实现,循环也会保持循环

只要条件保持为true while循环就会保持循环。

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

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

&&代替|| 确实:现在while循环是这样的:“ 只要用户没有赢过两次或更多次就保持循环,并且计算机没有赢过两次或更多次。

尝试用&&替换。 你需要少于2来保持循环继续

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM