Java随机数生成器

3

初学者问题: 我尝试使用以下代码创建随机数:

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

然而,当我在屏幕上打印时,答案总是为0。只有在添加括号后才能得到正确结果。
int rand = (int)(Math.random()*10);

这个数字是否正确显示了呢?有没有人能够解释一下我可能错过的逻辑原因呢?

5个回答

5
当你写下int rand = (int) Math.random()*10时,实际上你写的是:
int rand = ((int) Math.random()) * 10;

因此您得到0,因为随机数在0和1之间,将其转换为int类型会等于0。

3

Math.random() 返回一个介于0和1之间(不包括0和1)的双精度浮点数,这意味着 (int)Math.random() 总是返回0(因为 Math.random() < 1)。为了在强制转换为整数之前执行乘法运算,必须像您所做的那样使用括号。


3
代码
int rand = (int) Math.random()*10;

等同于

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

因此,Math.random()的值被转换为一个int。由于该值介于0和1之间(1不包括在内),因此它总是被转换为0。
(int) Math.random()*10 -->  ((int) Math.random()) * 10 --> 0 * 10 --> 0

2
其他答案已经解释了你的代码问题,所以我不会再在这里讨论这个话题。
这只是有关生成随机数的注释:
在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);

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


0
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接