遇到问题||和&&

时间:2014-05-16 16:30:01

标签: java

我是编程新手,并希望用Java编写一个骰子滚动程序来执行。 代码如下:

import java.math.*;
public class Dices {
public static int dice1=0;
    public static int dice2=0;
    public static int x;
    public static void main(String args[]){
    do {
        x++;
        dice1=(int) (Math.random()*6+1);
        dice2=(int) (Math.random()*6+1);
        System.out.println(dice1+", "+dice2);
    } while(dice1 !=1 || dice2 !=1);
    System.out.println("Finalthrow: "+dice1+", "+dice2);
    System.out.println("Snake-Eyes after "+x+" tries.");
    }
}

这种方式工作正常,但在我看来代码有问题。实际上应该是while条件。但是如果我使用&&,它会在第一个骰子上滚动1时立即停止。我认为&&意味着" AND"而||表示"或"。所以实际上它应该完全相反,或者我误解了什么?

5 个答案:

答案 0 :(得分:3)

Morgan's laws的一些理解可能对此有所帮助。法律说(对不起奇怪的语法,但我认为信息很清楚):

(!P) OR (!Q) == !(P AND Q)
(!P) AND (!Q) == !(P OR Q)

所以当您在条件

中使用 ||(OR)
while(dice1 !=1 || dice2 !=1)

完全相同
while(!(dice1 == 1 && dice2 == 1))

所以它会在两个骰子都为1之前徘徊。

另一方面,如果您使用 &&(AND)

while(dice1 !=1 && dice2 !=1)

相同
while(!(dice1 == 1 || dice2 == 1))

所以这意味着它将循环直到一个或两个的骰子为1

答案 1 :(得分:0)

&& means and
|| means or

所以(dice1!= 1 || dice2!= 1)表示继续循环,而dice1不是1或骰子2不是1.

所以(dice1!= 1&& dice2!= 1)表示继续循环,而dice1不是1,而骰子2不是1.

答案 2 :(得分:0)

代码很好。您希望循环在dice1 == 1dice2 == 1时结束。所以它必须循环直到这是真的,或者直到它的反面都是假的。与dice1 == 1 && dice2 == 1相反的是!(dice1 == 1 && dice2 == 1),相当于dice1 != 1 || dice2 != 1

以这种方式思考:如果dice1 != 1,请继续循环。此外,如果dice2 != 1,请继续循环。因此,如果其中任何一个为真,请保持循环。要测试 是否为真,无论两者是否为真,请使用||

答案 3 :(得分:0)

行为是正确的。你用dice1 !=1 && dice2 !=1说重复loopuntil骰子的两个不是1.但是当一个骰子滚动1时,条件为假并且循环逃脱。尝试使用真值表。

答案 4 :(得分:0)

让我们制作一个真值表。

enter image description here

我们可以从中得出什么结论?如果您希望循环继续,而 AB1 不同(或者,正如De Morgan的法律所述:直到它们都等于1 ),然后你可以将它缩小到这些值:

enter image description here

由于我们需要找到允许我们继续循环的运算符(又名:条件为true),我们将为所有3种不同类型的输入获取返回true的列,是A || B

请注意,A && BA || B是指A != 1B != 1的结果,而不是实际输入。