我正在尝试使用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))
,但它不起作用。
答案 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来保持循环继续