[英]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.