使用随机对象模拟 2 个骰子,直到掷出 2 或 12 个骰子

  • 本文关键字:对象 随机 模拟 java random
  • 更新时间 :
  • 英文 :

public class DiceLoop {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int die1;
        int die2;
        int roll = 0;
        int count = 0;


        while(roll != 2 || roll != 12) {
            die1 = (int)(Math.random()*6 + 1); 
            die2 = (int)(Math.random()*6 + 1); 
            roll = die1 + die2;
            count = count + 1;
            System.out.println("Die 1: " + die1);
            System.out.println("Die 2: " + die2);
            System.out.println("Total: " + roll);
            if(roll == 2 || roll == 12){
                System.out.println("Stop rolling the dice. 2 or 12 has been thrown.");
                }
                else {
            }
        }
    }
}

我无法弄清楚为什么我的程序作为无限循环运行。我认为这可能是我的 else 语句有问题,但我无法让骰子停止滚动。

快速浏览后,我相信将||(逻辑 OR(更改为&&(逻辑 AND(将解决问题。

public class DiceLoop
{
    public static void main(String[] args)
    {
        int die1;
        int die2;
        int roll = 0;
        int count = 0;
        while(roll != 2 && roll != 12)
        {
            die1 = (int)(Math.random()*6 + 1); 
            die2 = (int)(Math.random()*6 + 1); 
            roll = die1 + die2;
            count = count + 1;
            System.out.println("Die 1: " + die1);
            System.out.println("Die 2: " + die2);
            System.out.println("Total: " + roll);
            if(roll == 2 || roll == 12)
            {
                System.out.println("Stop rolling the dice. 2 or 12 has been thrown.");
            }
            else
            {
            }
        }
    }
}

有关说明,请参阅@drewmoore的答案。

@Nikola,@ifLoop @StephenC都是正确的,但我认为说明它们为什么正确的最清晰方法是使用真值表:

roll = 2      roll = 12     (roll != 2 || roll != 12) (roll != 2 && roll != 12)
   F              F                     T                        T
   F              T                     T                        F
   T              F                     T                        F
   T              T                     F                        F

用逻辑 OR ( || 编写(,这个语句只有在 roll 既是 12 又是 2 时才是假的——这当然是不可能的,所以它总是真的,你有一个无限循环。使用逻辑 AND,当 roll 不是 12 也不是 2 时,语句为真,否则(如果它是 2 或 12 两者兼而有之(谁知道呢,也许这在其他宇宙中是可能的((,它是假的,这就是你想要的。

问题就在这里:

   while(roll != 2 || roll != 12) 

想想吧。

  • 如果 roll 为 2,则不会是 12,因此false OR truetrue
  • 如果 roll 为 12,则不会是 2,因此true OR falsetrue
  • 如果滚动是其他任何东西,true OR truetrue.

简而言之,roll没有任何价值会导致roll != 2 || roll != 12评估false。 因此,你会得到一个无限循环。

这是你的 while 条件:

while(roll != 2 || roll != 12)

换句话说:虽然角色编号不是 2 或 12。这永远不能被评估为错误!使用&&(逻辑和(而不是||(逻辑或(

do while 循环的定义

while 语句连续执行语句块,而特定条件为真。其语法可以表示为:

而(表达式({

 statement(s)

}

让我们来看看你的 while 循环

 while(roll != 2 || roll != 12)

想象一下,卷的值是 2 或 12。假设是 2

 while(2 != 2 || 2 != 12)
         ^         ^
        false      true

因此

 while(true) 

为什么?

由于逻辑 OR,所以正如你所看到的,这个循环永远不会结束,因为根据 while 定义,while 语句在特定条件为 true 时不断执行语句块

如果将逻辑 OR 更改为逻辑 AND

 while(2 != 2 && 2 != 12)
         ^         ^
        false      true

因此

 while (false) 

它是基于 while 定义的循环的结束。

相关内容

  • 没有找到相关文章

最新更新