Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不是';在Java中,这些随机数是否在一个等效的范围内生成?_Java_Random - Fatal编程技术网

不是';在Java中,这些随机数是否在一个等效的范围内生成?

不是';在Java中,这些随机数是否在一个等效的范围内生成?,java,random,Java,Random,以下是在范围(开始、结束)内生成随机整数的两种变体: 方法1: int rand = (int)(Math.random()*(end-start)+1)+start; 方法2: Random numbergenerator = new Random(); int rand=numbergenerator.nextInt(end-start)+start; 方法2似乎对我有效 我问这个问题的原因是:我试图调试我的代码,当我将随机int生成更改为方法2时,一切似乎都正常工作。方法1给出了意外的

以下是在
范围(开始、结束)
内生成随机整数的两种变体:

方法1:

int rand = (int)(Math.random()*(end-start)+1)+start;
方法2:

Random numbergenerator = new Random();
int rand=numbergenerator.nextInt(end-start)+start;
方法2似乎对我有效

我问这个问题的原因是:我试图调试我的代码,当我将随机
int
生成更改为方法2时,一切似乎都正常工作。方法1给出了意外的结果

出乎意料的结果来自不同的帖子:但这是对这个问题的干扰 但事实仍然如此。在这里,我用方法2代替了方法1,一切都很好

所以问题是这些随机整数生成的方法是否不同。 我使用的方法1在本次投票中得到了提升


什么样的情况下它们都可能不同(如果它们不同的话)?

鉴于您意外的结果出现,我怀疑您所说的意外是指它并没有真正对数字进行排序

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

因此,基本上删除此处的
+1
部分:

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

因此,范围是通常的
[开始,结束-1]
。我之所以说“通常”,是因为数组的索引范围是
[0,length-1]

结果如何出乎意料?随机数应该出乎意料。这就是问题的关键。“如果他们两个都不一样(如果他们不一样的话),你会告诉我们什么样的例子呢?”!你观察到了意想不到的结果
Math.random()
相当于
random.nextDouble()
而不是
random.nextInt()
@user1988876您按错了。
(结束-开始)+1附近缺少括号。也就是说,整个shebang应该是
Math.random()*((end-start)+1)
。运算符优先级使代码等效于
(Math.random()*(end-start))+1
。其想法是将范围扩大
1
,以避免上述问题。不要将
1
添加到从较小范围获取随机数的结果中。这很好地澄清了这一点。谢谢@用户1988876很乐意帮忙