新手在这里,
我有两个变量通过.Random
生成随机数。我希望它们继续滚动,直到两个变量同时生成两个不同的值。因此,我正在使用while
循环&&
来实现此目的。据我了解,请纠正我,如果我错了,行while ((diceRolled1 != 5) && (diceRolled2 != 4))
翻译为,请继续滚动,直到diceRolled1
的值不等于5 AND diceRolled2
不等于4 。但是,如果任一变量与其值匹配,则程序结束(diceRolled1 = 5 OR diceRolled2 = 4)。这不是&&
应该做的,对吧?我已经运行了10次代码,但没有一次同时生成5和4。
我也在双方和任何一方尝试过==
,但在这种情况下,程序根本没有运行,也没有给出任何错误。
非常感谢您的帮助。谢谢
import java.util.Random;
import static java.lang.System.out;
public class DiceRoller {
public static void main(String[] args) {
Random dice1 = new Random();
Random dice2 = new Random(); //Removing this doesn't work either
int diceRolled1 = 0;
int diceRolled2 = 0;
while ((diceRolled1 != 5) && (diceRolled2 != 4)) { //& didn't work either
diceRolled1 = dice1.nextInt(6) + 1;
diceRolled2 = dice2.nextInt(6) + 1;
out.println(diceRolled1 + " " + diceRolled2);
}
out.println("Program ends");
}
}
答案 0 :(得分:3)
你的逻辑错误。只要两个值不匹配,循环就会继续 - 只要一个值匹配,循环就会退出。我们可以颠倒你的逻辑来表明这一点:
while (!(diceRolled1 == 5 || diceRolled2 == 4)) {
在逻辑上等同于你所拥有的。
你想要的是这个:
while (diceRolled1 != 5 || diceRolled2 != 4) {
表示"继续,而任何变量都没有所需的值"
答案 1 :(得分:1)
您获得了所描述的逻辑结果,但它并不是您所期望的。具体来说,当您的任何一个条件评估为false
逻辑且不会评估为true
时。我想你想要
while (!(diceRolled1 == 5 && diceRolled2 == 4)) {
while
不 dice1等于5 和 dice2等于4.然后,使用De Morgan's Laws,也可能表示为
while (diceRolled1 != 5 || diceRolled2 != 4) {
表示 loop while
dice1不等于5 或 dice2不等于4.
答案 2 :(得分:1)
while执行语句,直到条件为真。 在你的代码中,条件由(diceRolled1!= 5)&& (diceRolled2!= 4)。 和&& operator必须为true才能使所有操作数都为true。 鉴于此,当至少有一个表达式为假时,你的循环将结束。
要在生成5和4时完成程序,你必须使用它:
(!(diceRolled1 == 5)&&(diceRolled2 == 4))
答案 3 :(得分:0)
while (!(dicerolled ==4 && dicerolled == 5))