这两种查找随机数的方法之间的区别?

cho*_*lla 1 java random

例如,如果我要生成5到50之间的随机数,我知道我可以将代码编写为:

ranNum = (int)Math.random()*(50-5+1)+5;
Run Code Online (Sandbox Code Playgroud)

要么

ranNum = Math.round(Math.random()*(50-5))+5;
Run Code Online (Sandbox Code Playgroud)

就生成随机数的过程而言,两者之间有什么区别?哪个会更快?

Pet*_*rey 7

速度在这里并不重要.

ranNum = (int)Math.random()*(50-5+1)+5;
Run Code Online (Sandbox Code Playgroud)

这产生5到50之间的随机数,其中每个数字具有相等的发生机会.


ranNum = Math.round(Math.random()*(50-5))+5;
Run Code Online (Sandbox Code Playgroud)

这产生了5到50之间的随机数,然而5和50的发生几率是其他的一半,即在ronding值之前必须<5.5得到5并且> = 49.5得到50.


注意:两者都不是在范围内生成随机数的最快方法.

int n = random.nextInt(50 - 5 + 1) + 5;
Run Code Online (Sandbox Code Playgroud)

这更快,因为它使用较少的随机位.