繁体   English   中英

Java随机数

[英]Java random number

初学者问题:我尝试使用此代码创建一个随机数

int rand = (int) Math.random()*10;

但是,在打印到屏幕时,我一直收到0作为答案

只有在插入括号后才这样

int rand = (int)(Math.random()*10);

数字显示得当。 任何人都可以解释我错过的逻辑原因吗?

当你写int rand = (int) Math.random()*10 ,你实际上在写:

int rand = ((int) Math.random()) * 10;

因此,您得到0,因为随机数介于0和1之间,并将其转换为int使其等于0。

Math.random()返回0到1之间的double数字,这意味着(int)Math.random()将始终为0(因为Math.random() < 1 )。 为了在强制转换为int之前执行乘法运算,必须像使用括号一样使用括号。

编码

int rand = (int) Math.random()*10;

相当于

int rand = ((int) Math.random()) * 10; 

因此, Math.random()的值将转换为int 因为该值介于0和1之间(1除外),所以它总是转换 为零

所以

(int) Math.random()*10 -->  ((int) Math.random()) * 10 --> 0 * 10 --> 0

其他答案已经解释了您的代码的问题,所以我不再在这里讨论这个主题了。

这只是关于随机数生成的注释:
在java中生成随机数的推荐方法不是Math.random() ,而是通过java.util.Random类( http://docs.oracle.com/javase/7/docs/api/java/util) /Random.html )。

要生成如上例所示的随机数,您可以使用以下代码:

Random rnd = new Random();
int i = rnd.nextInt(10);

,这将产生与您的代码相同的结果。

int rand = (int) Math.random()*10;

相当于

int rand = ((int) Math.random())*10;

考虑到Math.random()从0 <= N <1返回一个数字,如果你试图强制转换它,你将总是得到0,乘以10仍然是0

int rand = ((int) Math.random()); -- ALWAYS --> ZERO

0*N ---- ALWAYS ---> ZERO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM