Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,(int)(Math.random())和Math.random()之间的区别是什么?_Java - Fatal编程技术网

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

在java中,(int)(Math.random())和Math.random()之间的区别是什么?,java,Java,(Math.random())前面的(int)到底对它做了什么?我知道这和从Math.random()中得到一个整数有关,但我真的不明白它是怎么做到的。我不明白这个(int)是怎么工作的。我的意思是,例如,我如何以其他方式使用它?Math.random()的签名是public static double random()意思是它返回一个double值 如果出于某种原因需要整数,则应将该值转换为int。 为了简洁起见,它会在双精度曲线的点部分后剪切任何数字 e、 g.1.2将变成1 2.45将变成

(Math.random())前面的(int)到底对它做了什么?我知道这和从Math.random()中得到一个整数有关,但我真的不明白它是怎么做到的。我不明白这个(int)是怎么工作的。我的意思是,例如,我如何以其他方式使用它?

Math.random()的签名是
public static double random()
意思是它返回一个
double

如果出于某种原因需要整数,则应将该值转换为
int
。 为了简洁起见,它会在双精度曲线的点部分后剪切任何数字

e、 g.
1.2
将变成
1

2.45
将变成
2

另外,你应该认真阅读铸造的相关知识,了解如何以及何时使用铸造

编辑:

像@FlorentBayle一样,
double()
生成的数字将始终返回
0
,因为它的范围是
[0,1)
0
包括在内,也就是说
1
排除。因此,您必须将它与
int
相乘,该值等于所需范围的最大值:

e、 g.要使
int
进入范围
[0,5)
,应使用:

int i = (int) (Math.random()*5);

Math.random()
的签名是
publicstaticdouble random()
意味着它返回一个
double

如果出于某种原因需要整数,则应将该值转换为
int
。 为了简洁起见,它会在双精度曲线的点部分后剪切任何数字

e、 g.
1.2
将变成
1

2.45
将变成
2

另外,你应该认真阅读铸造的相关知识,了解如何以及何时使用铸造

编辑:

像@FlorentBayle一样,
double()
生成的数字将始终返回
0
,因为它的范围是
[0,1)
0
包括在内,也就是说
1
排除。因此,您必须将它与
int
相乘,该值等于所需范围的最大值:

e、 g.要使
int
进入范围
[0,5)
,应使用:

int i = (int) (Math.random()*5);
(int)将Math.random()的双重结果强制转换为整数。 因此(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);
如果需要整数随机数,则首先需要将随机数的结果进行多重化

int factor = 100;
i = (int)(Math.random() * factor);
System.out.println(i);
(int)将Math.random()的双重结果强制转换为整数。 因此(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);
如果需要整数随机数,则首先需要将随机数的结果进行多重化

int factor = 100;
i = (int)(Math.random() * factor);
System.out.println(i);
此语法是一种强制转换。它是在类型之间直接转换的一种方式;最常见的用例是,当您知道特定实例确实是某一子类型时,将特定类型的值转换为特定子类型,例如:

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节。

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

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节。

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  
Random()只是java.util.Random()的包装器

因此,相反,做一个

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

关于施法你知道些什么?了解它。那是答案隐藏的地方。好的,我会的!谢谢!你知道关于施法的什么?了解它。那是答案隐藏的地方。好的,我会的!谢谢!标量值的施法与对象引用的施法完全不同。两者都是完全“安全的”。标量值的强制转换与对象引用的强制转换完全不同。两者都是完全“安全”的。因此,将标量值强制转换为
int
将始终返回
0
,因此,将标量值强制转换为
int
将始终返回
0