java - 掷骰子的 Java 方法每次都返回“双倍”
问题描述
我正在创建一个游戏,用户必须掷两个骰子并根据掷出的内容做某些事情。我有一种掷骰子的方法,我调用了两次来刺激掷两个骰子。
import java.util.Random;
public class test {
public static int dice() {
Random generator = new Random(System.currentTimeMillis());
return generator.nextInt(6) +1;
}
public static void main(String[] args) {
int roll1 = dice();
int roll2 = dice();
System.out.println(roll1);
System.out.println(roll2);
}
}
始终如一地,两个卷返回相同的数字,即使它们被单独调用。
注意:我用当前时间播种随机生成器以避免这种情况。
非常感谢任何帮助,我是 Java 新手!
解决方案
发生这种情况是因为您Random
每次都在dice()
方法中创建一个新对象。当您多次快速调用该方法时(在同一毫秒内),Random
对象将具有相同的种子,该种子基于当前系统时间,并会产生相同的随机数。
解决方案:不要Random
每次都创建一个新对象。创建一次,将其保存为成员变量,然后重复使用。
import java.util.Random;
public class test {
private static final Random generator = new Random();
public static int dice() {
return generator.nextInt(6) + 1;
}
public static void main(String[] args) {
int roll1 = dice();
int roll2 = dice();
System.out.println(roll1);
System.out.println(roll2);
}
}
推荐阅读
- python - 如何在 VTKi 中绘制超环面或环形面
- automationanywhere - 如何使用 Automation Anywhere 遍历 Web 表格列并下载多个 PDF 文件?
- python - 在 / 'function' 对象处获取 TypeError 是不可迭代的
- css - wordpress 创世纪中站点标题、站点内部和站点页脚问题的结构和布局 style.css
- html - 如何使用网格结构嵌入视频?
- php - 无法从 CodeIgniter 中的会话登录中获取和显示数据名称
- plotly - 是否可以在 Dash 中的 Checkboxes 中突出显示部分标签
- vue.js - 从 firstore 集合中获取带有 ID 的文档
- c++ - 基于索引向量的特征矩阵切片
- java - 如何从活动中隐藏片段 - Android Studio