目前在课堂上,学习Java中的数学
当我的老师给我看这个公式时,我无言以对吗?if ((int)(Math.random() * 15) == 1) {
* 15怎么可能是1?
答案 0 :(得分:3)
假设Math.random返回0.08907633950002491
现在根据你的公式
0.08907633950002491*15 it returns 1.3361450925003737
在int类型转换后将是1
(int)(Math.random() * 15) == 1 returns true
答案 1 :(得分:1)
java.lang.Math.random()返回带有正数的double值 符号,大于或等于0.0且小于1.0。
x * 15 = 1
x = 1/15
所以X是0-1区间的双精度值。一切都是正确的。
答案 2 :(得分:1)
这是因为强制转换为整数
(int)Math.random()
您会看到Math.random()提供介于0.0和1.0之间的随机数 当你转换为一个整数时,你实际上是在说“扔出所有小数位”
所以,如果你有0.5做(int) Math.random()
就会给你0。
现在看看你的代码,你会有类似的东西
假设Math.random()给出0.3,你就有
((int)(0.3 * 15) == 1)
((int)(4.5) == 1)
现在会记住int
的投射情况了吗?抛出小数位。所以我们留下了if (4 == 1)
。
在这种情况下,条件将为false,因此if中的代码将不会运行,但在乘法后您可能会有一个像1.xx这样的数字。