Java - AND运算符无法正常工作

时间:2016-04-08 16:53:39

标签: java

新手在这里,
我有两个变量通过.Random生成随机数。我希望它们继续滚动,直到两个变量同时生成两个不同的值。因此,我正在使用while循环&&来实现此目的。据我了解,请纠正我,如果我错了,行while ((diceRolled1 != 5) && (diceRolled2 != 4))翻译为,请继续滚动,直到diceRolled1 的值不等于5 AND diceRolled2 不等于4 。但是,如果任一变量与其值匹配,则程序结束(diceRolled1 = 5 OR diceRolled2 = 4)。这不是&&应该做的,对吧?我已经运行了10次代码,但没有一次同时生成5和4。

我也在双方和任何一方尝试过==,但在这种情况下,程序根本没有运行,也没有给出任何错误。

非常感谢您的帮助。谢谢

import java.util.Random;
import static java.lang.System.out;

public class DiceRoller {
public static void main(String[] args) {
    Random dice1 = new Random();
    Random dice2 = new Random();        //Removing this doesn't work either

    int diceRolled1 = 0;
    int diceRolled2 = 0;

    while ((diceRolled1 != 5) && (diceRolled2 != 4)) { //& didn't work either 
        diceRolled1 = dice1.nextInt(6) + 1;
        diceRolled2 = dice2.nextInt(6) + 1;
        out.println(diceRolled1 + " " + diceRolled2);
    }
    out.println("Program ends");
}
}

4 个答案:

答案 0 :(得分:3)

你的逻辑错误。只要两个值不匹配,循环就会继续 - 只要一个值匹配,循环就会退出。我们可以颠倒你的逻辑来表明这一点:

while (!(diceRolled1 == 5 || diceRolled2 == 4)) {

在逻辑上等同于你所拥有的。

你想要的是这个:

while (diceRolled1 != 5 || diceRolled2 != 4) {

表示"继续,而任何变量都没有所需的值"

答案 1 :(得分:1)

您获得了所描述的逻辑结果,但它并不是您所期望的。具体来说,当您的任何一个条件评估为false逻辑且不会评估为true时。我想你想要

while (!(diceRolled1 == 5 && diceRolled2 == 4)) {

while dice1等于5 dice2等于4.然后,使用De Morgan's Laws,也可能表示为

while (diceRolled1 != 5 || diceRolled2 != 4) {

表示 loop while dice1不等于5 dice2不等于4.

答案 2 :(得分:1)

while执行语句,直到条件为真。 在你的代码中,条件由(diceRolled1!= 5)&& (diceRolled2!= 4)。 和&& operator必须为true才能使所有操作数都为true。 鉴于此,当至少有一个表达式为假时,你的循环将结束。

要在生成5和4时完成程序,你必须使用它:

(!(diceRolled1 == 5)&&(diceRolled2 == 4))

答案 3 :(得分:0)

是的,它应该是。如果dicerolled是5或4,程序应该结束,因为只要它不是4而不是5就在while循环中。如果只有值为4或5,它将退出while循环。因此,您的逻辑不正确。抱歉! :) 尝试:

while (!(dicerolled ==4 && dicerolled == 5))