Java 基本随机滚动骰子

Java 基本随机滚动骰子,java,random,Java,Random,我正在尝试编写一个方法rollDice(intnumber,intnsides),它返回使用nSides边滚动数字骰子的总结果 例如,rollDice(3,6)应该返回滚动3个六面骰子的结果(加上3到18之间的数字) 当我为int number键入1时,下面的方法返回负数。我需要做什么来修复此问题 public static int rollDice(int number, int nSides) { int num = 0; if(nSides >=3) {

我正在尝试编写一个方法rollDice(intnumber,intnsides),它返回使用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; 
} 
publicstaticintrolldice(intnumber,intnsides){
int num=0;
如果(nSides>=3)
{
for(int i=0;i
当你对负数使用
%
时,你会得到一个负数

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

int roll = r.nextInt(nSides) + 1; // 1 to nSizes
num += roll;
Random.nextInt()
具有不可预测的行为-它可以生成整数的所有可能值,包括负数。改为使用
Random.nextInt(numSides)
-它将从[0,numSides]返回一个整数,即包括0,不包括numSides。要获得所需的功能[1,numSides],请使用

r.nextInt(numSides)+1;

有关更多信息,请参阅。

这是您的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;
}
publicstaticintrolldice(intnumber,intnsides){
整数计数=0;
for(int i=0;i
替换
int roll=r.nextInt();



int roll=r.nextInt(nSides);

您只需要初始化
Random r
int 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
*/
import java.util.Random;
公共类骰子{
公共静态int rollDice(int编号,int nSides)
{ 
int num=0;
int roll=0;
随机r=新随机();
如果(nSides>=3)
{ 
for(int i=0;i
为什么你不能有一个双面卷,例如硬币?你不需要从nSides中减去一个。是的,Peter than,我也不需要加+1,因为它会在下一行中处理。Thanksapcris只是出于兴趣。我能问一下你为什么在这里有main方法吗?我以前学过,但我从来没有足够的理解它来使用它。main方法是运行代码时执行的操作。如果您只需要rollDice方法,则不需要main方法。他在这里提供了一个方法来演示rollDice函数。