Java 掷两个骰子。计算两者的迭代次数以匹配条件

Java 掷两个骰子。计算两者的迭代次数以匹配条件,java,dice,Java,Dice,在我的程序中,我有两个100张脸的骰子。我让它计算骰子一(d1)等于99和骰子二(d2)等于26所需的掷骰数量 package diceroll; import java.util.Random; public class DiceRoll { public static void main(String[] args) { int count = 0; int d1 = 0; int d2 = 0; while (d1 != 99 &&

在我的程序中,我有两个100张脸的骰子。我让它计算骰子一(d1)等于99和骰子二(d2)等于26所需的掷骰数量

package diceroll;

import java.util.Random;

public class DiceRoll {

public static void main(String[] args) {

    int count = 0;
    int d1 = 0;
    int d2 = 0;

    while (d1 != 99 && d2 != 29) {
        d1 = (int) (Math.random() * 100) + 1;
        d2 = (int) (Math.random() * 100) + 1;
        count += 1;
    }
    System.out.println(count + " " + d1 + " " + d2);
}
当使用AND运算符(&&)时,while循环仅在找到其中一个数字之前工作,而当使用OR运算符(d1!=99 | | d2!=29)时,while循环在两者匹配之前工作


有人能解释为什么或给出预期的结果,而不是吗?

这就是
的工作原理。它只寻找一个返回
false
的表达式来终止循环。如果
d2
变为
29
,反之亦然,那么
d1
是否为
69
并不重要

但是当您使用
时,它会检查这两种情况。这样,即使
d2
变为
29
并且
d1
仍然不是
69
,它仍会继续循环,直到
d1
变为69,因此只有当这两个条件都满足时,才会评估为
false

while (condition)
保持循环,直到
条件
为false。您的循环是:

while (d1 != 99 && d2 != 29) {
但测试的两半都必须为真,才能使整个条件为真。一旦其中一个数字匹配,一半将为假(不相等)

如果将条件更改为或:

while (d1 != 99 || d2 != 29) {

那么只有一方需要为真,整个条件才为真,或者换句话说,双方都需要为假,整个条件才为假。这个或条件可以用英语表示为“其中任何一个数字都不是目标”。只有当两个数字都是其目标时,整个条件才为false。

当您使用
&&
时,如果其中一个骰子不等于所需的数字,您的条件仍然返回
false
。例如,如果
d1=99
d2=1
,您的
while
条件将为:
99!=99 && 1 != 29
->
假和真
->
。所以它退出了。

是的,我现在明白了。通过使用while not and OR逻辑,我创建了具有下表的NOR逻辑:

A B Z

01

0110

100

110


谢谢大家的帮助!:)

写下逻辑表。你想让d==99和d2==29的值在同一卷中吗?写
而(!(d1==99&&d2==29))
可以帮助你理解。将DeMorgan变换定律应用于给出您使用的表达式的对象。