当我运行我的代码时,它给出范围(-3,4)中的整数(-3和4除外)。不应该包括在内吗?对于(int)(Math.random() * 7);
,包括0。
public class code {
public static void main(String[] args) {
int a;
a = (int)(Math.random() * 7 - 3);
System.out.println(a);
}
}
为了使问题更清楚(假设我理解正确),为什么(int)(Math.random() * 7 - 3)
不会返回-3而(int)(Math.random() * 7)
可以返回0?
答案 0 :(得分:0)
Math.random()
给出一个大于或等于零且小于1的数字。所以:
0 <= Math.random()*7 < 7
-3 <= Math.random()*7-3 < 4
当你转换为int时,会删除尾随的小数。
因此,您只能得到介于-3和3之间的值(这意味着有7个可能的整数值)。
答案 1 :(得分:0)
(int)(Math.random() * 7 - 3)
可以返回-3 - 这只是非常非常不可能。
请记住,转换为int将丢弃该数字的小数部分,因此-2.9999999999999最终将为-2。
如果Math.random()
返回零,或者数字极接近零,则表达式最终可以为-3.0,因此在转换为int时变为3:
scala> (1e-17 * 7 - 3).toInt
res7: Int = -3
scala> (1e-16 * 7 - 3).toInt
res8: Int = -2
(在Scala中完成,因为它很方便,但底层数字与Java相同)