Java随机数
Java random number
这里是初学者问题:
我尝试使用此代码创建一个随机数
int rand = (int) Math.random()*10;
但是,打印到屏幕时我一直收到 0 作为答案
只有像这样加上括号后
int rand = (int)(Math.random()*10);
号码显示正确吗?
谁能解释我错过的逻辑原因?
Math.random()
returns 一个介于 0 和 1 之间的 double
数字,这意味着 (int)Math.random()
将始终为 0(因为 Math.random() < 1
)。为了在转换为 int 之前执行乘法,您必须像以前一样使用括号。
当你写 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
其他答案已经用你的代码解释了这个问题,所以我不再讨论这个话题。
这只是关于random-numbers生成的注释:
在 java 中生成 random-numbers 的推荐方法不是 Math.random()
,而是通过 java.util.Random
class (http://docs.oracle.com/javase/7/docs/api/java/util/Random.html).
要生成如上例所示的 random-number,您可以使用以下代码:
Random rnd = new Random();
int i = rnd.nextInt(10);
,这将产生与您的代码相同的结果。
int rand = (int) Math.random()*10;
相当于
int rand = ((int) Math.random())*10;
考虑到 Math.random() return 一个从 0<=N<1 的数字,如果你尝试转换它你总是会得到 0,乘以 10 仍然是 0
int rand = ((int) Math.random()); -- ALWAYS --> ZERO
0*N ---- ALWAYS ---> ZERO
这里是初学者问题: 我尝试使用此代码创建一个随机数
int rand = (int) Math.random()*10;
但是,打印到屏幕时我一直收到 0 作为答案
只有像这样加上括号后
int rand = (int)(Math.random()*10);
号码显示正确吗? 谁能解释我错过的逻辑原因?
Math.random()
returns 一个介于 0 和 1 之间的 double
数字,这意味着 (int)Math.random()
将始终为 0(因为 Math.random() < 1
)。为了在转换为 int 之前执行乘法,您必须像以前一样使用括号。
当你写 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
其他答案已经用你的代码解释了这个问题,所以我不再讨论这个话题。
这只是关于random-numbers生成的注释:
在 java 中生成 random-numbers 的推荐方法不是 Math.random()
,而是通过 java.util.Random
class (http://docs.oracle.com/javase/7/docs/api/java/util/Random.html).
要生成如上例所示的 random-number,您可以使用以下代码:
Random rnd = new Random();
int i = rnd.nextInt(10);
,这将产生与您的代码相同的结果。
int rand = (int) Math.random()*10;
相当于
int rand = ((int) Math.random())*10;
考虑到 Math.random() return 一个从 0<=N<1 的数字,如果你尝试转换它你总是会得到 0,乘以 10 仍然是 0
int rand = ((int) Math.random()); -- ALWAYS --> ZERO
0*N ---- ALWAYS ---> ZERO