java - 这些随机数生成不是在 Java 中等效的范围内吗?

标签 java random

下面是生成range (start, end)内随机整数的两种变体:

方法一:

int rand = (int)(Math.random()*(end-start)+1)+start;

方法二:

Random numbergenerator = new Random();
int rand=numbergenerator.nextInt(end-start)+start;

方法 2 似乎对我有用。

我问这个的原因:我试图调试我的代码,当我将我的随机 int 生成更改为方法 2 时,一切似乎都运行良好。方法 1 给出了意想不到的结果。

意想不到的结果来自不同的帖子:但这是对这个问题的干扰 还是here .在这里,我用方法 2 替换了方法 1,一切正常。

所以问题是这些随机 int 生成方法是否不同。 我使用的方法 1 已在此 post. 中得到支持

什么是它们可能不同(如果它们不同)的示例?

最佳答案

鉴于你意想不到的结果来了from a sorting algorithm ,我怀疑你所说的意外是指它并没有真正对数字进行排序。

问题在于两种方法中随机数的范围不同。方法1中的范围是[start+1 , end],方法2中的范围是[start, end-1]

所以基本上删除这里的 +1 部分:

int rand = (int)(Math.random()*(end-start)+1)+start;

所以范围是通常的[start, end-1]。我说通常是因为数组在[0, length-1] 范围内建立索引。

关于java - 这些随机数生成不是在 Java 中等效的范围内吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695159/

相关文章:

java - 如何从具有来自另一个类的 string 和 int 值的数组列表中获取特定元素

java - 在不同平台上构建大小不同

random - 在 mathematica 中为线性方程创建随机系数

java - 随机数猜谜游戏的逻辑错误

python - 来自平滑数据的样本

algorithm - 均匀生成最多重复 k 次的排列?

java - 如何进行不区分大小写的字符串替换

java - 如何读取 3gp/AMR-NB 音频格式的原始值?

java - RCP 应用程序中的通知小部件

c++ - 使用 boost::random 并获得相同的数字序列