【问题标题】:Basic Random Rolling Dice Java基本随机掷骰子 Java
【发布时间】:2012-10-12 13:42:48
【问题描述】:

我正在尝试编写一个方法 rollDice(int number, int nSides),它返回用 nSides 边滚动数字骰子的总结果。

因此,例如 rollDice(3, 6) 应该返回掷出 3 个六面骰子的结果(加上 3 到 18 之间的数字)。

当我为 int number 键入 1 时,以下方法返回负数我需要做什么来解决这个问题?

public static  int rollDice(int number, int nSides) {
    int num = 0;
      if(nSides >=3)
    {
      for(int i = 0; i < number; i++){
       Random  r = new Random(); 
       int roll = r.nextInt();
       num = num + (roll % nSides)+1;

      }
    }
      else{
          System.out.println("Error num needs to be from 3");

    }
    return num; 
} 

【问题讨论】:

  • 为什么你不能有一个双面卷,例如硬币?

标签: java random


【解决方案1】:

Random.nextInt() 具有不可预测的行为 - 它可以生成整数的所有可能值,包括负数。请改用Random.nextInt(numSides) - 它会从 [0,numSides) 返回一个整数,即包括 0 和不包括 numSides。要获得所需的功能 [1,numSides],请使用

r.nextInt(numSides)+1;

更多信息请参见here

【讨论】:

    【解决方案2】:

    您只需要初始化Random rint roll 一次,因此我已将它们从循环中删除。 nextInt(int) 方法从 int 中选择一个整数,包括 0 到但不包括 int。这被称为 0(包括)到 int(不包括),因此您必须添加 1 来调整骰子的范围。你似乎已经知道了,虽然我不知道你为什么使用 %.使用 * 相乘将为所有我不相信你打算做的骰子提供相同的数字。这是您的类的一种可能实现:

    import java.util.Random;
    
    public class Dice {
    
        public static  int rollDice(int number, int nSides)
        { 
            int num = 0;
            int roll = 0;
            Random  r = new Random(); 
            if(nSides >=3) 
            { 
                for(int i = 0; i < number; i++)
                { 
                    roll = r.nextInt(nSides)+1;
                    System.out.println("Roll is:  "+roll);
                    num = num + roll; 
                } 
            } 
            else
            { 
                System.out.println("Error num needs to be from 3"); 
            } 
            return num;  
        } 
    
        public static void main(String[] args)
        {
            System.out.println("Total is: "+rollDice(3, 6));
        }
    }
    /*
    Roll is:  4
    Roll is:  1
    Roll is:  2
    Total is: 7
    */
    

    【讨论】:

    • apcris 只是出于兴趣。我可以问你为什么这里有 main 方法吗?我以前学过它,但我从来没有理解到能够使用它。
    • 主要方法是在您运行代码时执行的。如果您只需要方法 rollDice 那么您不需要 main 方法。他在这里包含一个来演示 rollDice 函数。
    【解决方案3】:

    替换
    int roll = r.nextInt();

    int roll = r.nextInt(nSides);

    【讨论】:

    • 你不需要从 nSides 中减去一个。
    • 是的 Peter,我也不需要添加 +1,因为它将在下一行中处理。谢谢
    【解决方案4】:

    当您在负数上使用% 时,您会得到一个负数。

    在这种情况下解决方法很简单,使用

    int roll = r.nextInt(nSides) + 1; // 1 to nSizes
    num += roll;
    

    【讨论】:

      【解决方案5】:

      这个作为你的 rollDice 方法怎么样:

      public static int rollDice(int number, int nSides) {
          int count = 0;
          for(int i = 0; i < number; i++) {
              count += (int)(Math.random() * nSides) + 1;
          }
          return count;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 2015-05-10
        • 2014-02-28
        • 1970-01-01
        • 2013-10-30
        • 1970-01-01
        • 2011-04-27
        相关资源
        最近更新 更多