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

时间:2016-03-03 16:12:07

标签: java do-while

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

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

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

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

3 个答案:

答案 0 :(得分:4)

你应该使用&amp;&amp;代替:

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

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

那被翻译成

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

这意味着:只要两者用户和comp连续获胜少于2次,就会停留在循环中。

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

答案 1 :(得分:4)

  

但是循环只是保持循环,即使它成真

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

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

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

使用&&代替||。确实:现在while循环类似于:&#34; 只要用户没有赢过两次或更多次就保持循环,并且计算机没有赢过两次或更多次。&# 34;

答案 2 :(得分:0)

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