有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

基本随机滚动骰子Java

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

例如,rollDice(3,6)应该返回滚动3个六边形骰子的结果(加上3到18之间的数字)

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

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; 
} 

共 (2) 个答案

  1. # 1 楼答案

    你只需要分别初始化Random rint roll一次,这样我就把它们从循环中删除了。nextInt(int)方法从0中选择一个整数,包括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
    */
    
  2. # 2 楼答案

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

    r.nextInt(numSides)+1;
    

    有关更多信息,请参见here