在java中,(int)(Math.random())和Math.random()之间有什么区别?

时间:2014-12-11 12:06:11

标签: java

完全(Math.random())之前的(int)是做什么的?我知道它与从Math.random()中获取一个整数有关,但我不能真正理解它是如何做到的。我无法理解这个(int)是如何工作的。我的意思是,例如,我如何以其他方式使用它?

4 个答案:

答案 0 :(得分:4)

(int)将Math.random()的double结果转换为整数。 所以(int)Math.random()总是为零,因为random()返回一个大于或等于0.0且小于1.0的数字

int i = (int)Math.random();
double d =  Math.random();

System.out.println(i);
System.out.println(d);

如果你需要整数randoms,首先需要多次输入随机

的结果
int factor = 100;
i = (int)(Math.random() * factor);
System.out.println(i);

答案 1 :(得分:0)

Math.random()的签名为public static double random(),表示其返回double值。

如果出于某种原因需要整数,则应将此值转换为int。 为了使其简洁,它会在你的双点中的点部分之后剪切任何数字。

e.g。 1.2将成为1 2.45将成为2

P.S。你应该真正阅读关于转换的内容,以便大致了解如何以及何时使用它。

编辑:

与@FlorentBayle一样评论说,double()生成的数字总是会返回0,因为它的范围是[0,1) 01是排他性的。因此,您必须将其乘以int,该int等于您所需范围的最大数量:

e.g。要将[0,5)放入范围int i = (int) (Math.random()*5); ,您应该使用:

{{1}}

答案 2 :(得分:0)

此语法是强制转换。它是一种直接在不同类型之间转换的方式;最常见的用例是当您知道特定实例确实是该子类型时,将特定类型的值转换为特定的子类型,例如:

abstract class Parent {...}
class Child extends Parent {...}

Parent myObject = ... //we know it's *really* a Child
Child myObject2 = (Child) myObject;

请注意,这是一个不安全的操作:如果myObject实际上是Parent的不同子类,它将在运行时失败(通过抛出ClassCastException) 。因此,通常应避免使用演员阵容。虽然编译器可能拒绝编译一些可证明错误的强制类型转换,但大多数情况下,您可以覆盖类型系统,将任何内容转换为任何内容,而失败只会在运行时发生。

原始类型之间的转换是特殊的,更安全(尽管我仍然建议尽可能避免使用它们,因为它们看起来像一样不安全的代码; Double.valueOf(Math.random()).intValue()获得相同的结果明显安全的方式,性能成本,虽然是真实的,但与大多数程序无关)。见JLS的5.1.3节。

答案 3 :(得分:0)

Math.Random()只是java.util.Random()的包装;

所以相反,做一个

Random rnd = new java.util.Random(); //costly operation so use only once
rnd.nextInt();                       //keep using nextwhatever for further operations