Java – AND运算符无法正常工作

新手在这里,
我有两个变量通过.Random生成随机数。 我希望它们继续滚动,直到两个变量同时生成两个不同的值。 因此,为了这个目的,我正在使用带&& while循环。 据我while ((diceRolled1 != 5) && (diceRolled2 != 4)) ,请纠正我,如果我错了,行while ((diceRolled1 != 5) && (diceRolled2 != 4))转换为,继续滚动直到diceRolled1的值不等于5 AND diceRolled2 是不等于4 。 但是如果任一变量与其值匹配(diceRolled1 = 5 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"); } } 

你得到了你描述的逻辑结果,但这不是你所期望的。 具体来说,当您的任何一个条件评估为false ,逻辑将不会评估为true 。 我想你想要的

 while (!(diceRolled1 == 5 && diceRolled2 == 4)) { 

while 不是 dice1等于5 dice2等于4.然后,使用De Morgan定律 ,也可能表示为

 while (diceRolled1 != 5 || diceRolled2 != 4) { 

这意味着循环, while dice1不等于5 dice2不等于4。

你的逻辑不正确。 只要两个值不匹配,循环就会继续 – 只要一个值匹配,循环就会退出。 我们可以反转你的逻辑来表明这一点:

 while (!(diceRolled1 == 5 || diceRolled2 == 4)) { 

这在逻辑上等同于你所拥有的。

你想要的是这个:

 while (diceRolled1 != 5 || diceRolled2 != 4) { 

其中显示“继续,而任何变量没有所需的值”

while执行语句直到条件为真。 在你的代码中,条件由(diceRolled1!= 5)&&(diceRolled2!= 4)给出。 &&运算符要求所有操作数都为true。 鉴于此,当至少有一个表达式为false时,你的循环将结束。

要在生成5和4时完成程序,您必须使用:

(!(diceRolled1 == 5)&&(diceRolled2 == 4))

是的,它应该是。 如果dicerolled是5或4,程序应该结束,因为只要它不是4而不是5就在while循环中。 如果只有值为4或5,它将退出while循环。因此,您的逻辑不正确。 抱歉! :)尝试:

 while (!(dicerolled ==4 && dicerolled == 5))