6

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

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

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

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

5 回答 5

13

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

r.nextInt(numSides)+1;

请参阅此处了解更多信息。

于 2012-10-12T13:46:43.703 回答
5

您只需要初始化一次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
*/
于 2012-10-12T14:00:03.253 回答
2

替换
int roll = r.nextInt();

int roll = r.nextInt(nSides);

于 2012-10-12T13:49:30.787 回答
0

这个作为你的 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;
}
于 2012-10-12T13:47:13.813 回答
0

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

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

int roll = r.nextInt(nSides) + 1; // 1 to nSizes
num += roll;
于 2012-10-12T13:45:10.620 回答