【问题标题】:Rolling two dice and returning count掷两个骰子并返回计数
【发布时间】:2018-04-17 14:41:50
【问题描述】:

我正在编写一个 java 程序来模拟两个骰子的滚动。对于每个掷骰,如果两个骰子的面不同,我会增加一个计数器。直到两个骰子都具有相同的面时,我才想打印出计数器值。 Count 基本上是在计算在两个骰子上获得相同面孔所需的次数。

我试着写了:

int count = 0;

while (true) {
    int dice1 = getRandom(1,6);
    int dice2 = getRandom(1,6);

    if (dice1 != dice2) {
        count ++;
    }
System.out.println(count);

代码似乎没有产生正确的输出。我很好奇我是否根据我的逻辑正确模拟它?我是java新手,希望能得到一些帮助。

getRandom() 函数返回 1 到 6 之间的随机数,因为骰子可以有 1 到 6 个值。

private static int getRandom(int n1, int n2){
    int retVal = 0;

    retVal = n1 + (int) Math.floor(Math.random() * (n2 - n1 + 1));

    return retVal;
}

【问题讨论】:

  • 你在哪里打破了while 循环?在我看来,while (getRandom(1,6) != getRandom(1,6)) count++; 应该可以完成这项工作。
  • 你可以使用 getRandom 函数来代替:1+ new Random().nextInt(6);你也可以阅读更多关于 do while 的内容

标签: java dice


【解决方案1】:

您总是在打印计数。您应该只在数字相等时打印计数,此时您可能应该跳出循环:

while (true) {
    int dice1 = getRandom(1,6);
    int dice2 = getRandom(1,6);

    if (dice1 != dice2) {
        count++;
    } else {
        break;
    }
}
System.out.println(count);

【讨论】:

  • @GoswinvonBrederlow 有多种方法可以实现相同的行为。你也可以使用do {} while ()
【解决方案2】:

你快到了!

您面临的问题是您永远不会终止您的while loop。您将需要这样的东西:

int count = 0;
boolean roll = true;
while (roll) {
    int dice1 = getRandom(1,6);
    int dice2 = getRandom(1,6);

    if (dice1 != dice2) {
        count ++;
    } else {
       roll = false;
}
System.out.println(count);

我添加了一个boolean,它说明是否应该掷骰子。一旦两个骰子的值相等,roll 就会设置为 false,循环终止。

【讨论】:

    【解决方案3】:
    import java.util.Scanner;
    public class Dice
    {
    
    public static void main(String[] args)
    {
            Scanner myInput=new Scanner(System.in);
            System.out.print("Tell me how many rolls of dice you would like to see");
            int numRolls=myInput.nextInt();
    
            //create array based on rolls
            int [] diceArray=new int[13];
            int diceRoll1;
            int diceRoll2;
            for(int index=0;index < numRolls;index++)
            {
                //diceArray[index]=(int)(Math.random()*11)+2;
                diceRoll1=(int)(Math.random()*6)+1;
                diceRoll2=(int)(Math.random()*6)+1;
                diceArray[diceRoll1]++;
            }
            for(int index=2;index<diceArray.length;index++)
            {
                //System.out.println(diceArray[index]);
                System.out.println(index + " " + diceArray[diceRoll1]);
            }
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多