[英]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.