这是什么答案?

时间:2015-04-18 18:58:53

标签: java

当我运行我的代码时,它给出范围(-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?

2 个答案:

答案 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相同)