下面是生成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/