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

时间:2014-02-03 11:36:41

标签: 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 && 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循环一直有效两者都匹配。

有人可以解释为什么OR会给出预期的结果,而AND却没有?

4 个答案:

答案 0 :(得分:0)

这就是AND的工作方式。它只是查找单个表达式以返回false来终止循环。如果d1变为69d2变为29,反之亦然,则不会打扰OR d2

但是当你使用29时,它会检查这两个条件。这样,即使d1变为69d1仍然不是false,它仍会循环直到{{1}}变为69,从而评估为{{1}只有当两个条件都满足时才会出现。

答案 1 :(得分:0)

循环

while (condition)

一直循环,直到condition为假。你的循环是:

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

两个测试的两半必须为true才能使整个条件成立。一旦其中一个数字匹配,一半将是假的(它不会不相等)。

如果您将条件更改为OR:

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

然后只有一个方需要为整个条件为真,或者换句话说,两个方需要为假,因为整个条件都是假。该OR条件可以用英语表示为“当其中一个数字不是目标时”。只有当两个数字都是他们的目标时,整个条件才是假的。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

是的,我现在明白了。通过使用while not和OR逻辑,我创建了NOR逻辑,其中包含下表:

A B Z

0 0 1

0 1 0

1 0 0

1 1 0

感谢帮帮! :)