基本随机滚动骰子Java
我正在尝试编写一个方法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; }
你只需要初始化Random r
和int roll
一次,所以我已经从循环中删除它们。 nextInt(int)方法从0中选择一个整数,但不包括int。 这被称为0(包括)到int(不包括),因此您必须添加1以调整到模具的范围。 你似乎已经知道,虽然我不知道你为什么使用%。 使用*乘以会给你所有骰子的相同数字,我不相信你的意思。 以下是您class级的一种可能实施方式:
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 */
Random.nextInt()
具有不可预测的行为 – 它可以为整数生成所有可能的值,包括负数。 使用Random.nextInt(numSides)
代替 – 它将从[0,numSides]返回一个整数,即包括0并排除numSides。 要获得所需的function[1,numSides],请使用
r.nextInt(numSides)+1;
有关更多信息,请参见此处
更换
int roll = r.nextInt();
同
int roll = r.nextInt(nSides);
当您在负数上使用%
,您会得到一个负数。
在这种情况下,解决方案很简单,使用
int roll = r.nextInt(nSides) + 1; // 1 to nSizes num += roll;
你的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; }
- WAS 8.5:java.lang.ClassCastException:org.apache.xerces.jaxp.SAXParserFactoryImpl与javax.xml.parsers.SAXParserFactory不兼容
- 使用Spring AOP的BeanNotOfRequiredTypeException
- 有没有正确的方法来构建URL?
- 在服务器端为servlet JSP MVC网站运行定期任务
- XStream序列化和反序列化中的多态性
- JAXB编辑列表getter?
- Spring Boot OAuth2单点注销(注销)
- 您如何决定何时升级项目中的库?
- Java 8:使用lambda表达式初始化HashMap