基本随机滚动骰子Java

Basic Random Rolling Dice Java

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}


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

1
r.nextInt(numSides)+1;

浏览此处获取更多信息。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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
*/


替换
int roll = r.nextInt();

int roll = r.nextInt(nSides);


你的rollDice方法怎么样:

1
2
3
4
5
6
7
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;
}

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

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

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