Java 掷两个骰子。计算两者的迭代次数以匹配条件
在我的程序中,我有两个100张脸的骰子。我让它计算骰子一(d1)等于99和骰子二(d2)等于26所需的掷骰数量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 &&
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变换定律应用于给出您使用的表达式的对象。