【发布时间】:2016-04-15 18:19:19
【问题描述】:
这里的初学者问题: 我尝试使用此代码创建一个随机数
int rand = (int) Math.random()*10;
但是,我在打印到屏幕时一直收到 0 作为答案
只有在这样放括号之后
int rand = (int)(Math.random()*10);
数字显示是否正确。 谁能解释我错过的逻辑原因?
【问题讨论】:
标签: java random numbers generator
这里的初学者问题: 我尝试使用此代码创建一个随机数
int rand = (int) Math.random()*10;
但是,我在打印到屏幕时一直收到 0 作为答案
只有在这样放括号之后
int rand = (int)(Math.random()*10);
数字显示是否正确。 谁能解释我错过的逻辑原因?
【问题讨论】:
标签: java random numbers generator
当你写int rand = (int) Math.random()*10时,你实际上是在写:
int rand = ((int) Math.random()) * 10;
因此,您得到 0,因为随机数介于 0 和 1 之间,并将其转换为 int 使其等于 0。
【讨论】:
代码
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
【讨论】:
Math.random() 返回一个介于 0 和 1 之间的 double 数字,这意味着 (int)Math.random() 将始终为 0(因为 Math.random() < 1)。为了在转换为 int 之前执行乘法,您必须像以前一样使用括号。
【讨论】:
其他答案已经解释了你的代码的问题,所以我不再在这里讨论这个话题了。
这只是一个关于随机数生成的说明:
在 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
int rand = ((int) Math.random()); -- ALWAYS --> ZERO
0*N ---- ALWAYS ---> ZERO
【讨论】: