在我的节目中,我有两个有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却没有?
答案 0 :(得分:0)
这就是AND
的工作方式。它只是查找单个表达式以返回false
来终止循环。如果d1
变为69
,d2
变为29
,反之亦然,则不会打扰OR
d2
。
但是当你使用29
时,它会检查这两个条件。这样,即使d1
变为69
且d1
仍然不是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=99
和d2=1
,您的while
条件会显示为:99 != 99 && 1 != 29
- > false && true
- > false
。所以它退出了。
答案 3 :(得分:0)
A B Z
0 0 1
0 1 0
1 0 0
1 1 0
感谢帮帮! :)