我对Math.random();
不太熟悉,我不知道如何处理我想要的条件。我想生成0到52之间的随机整数,这是我设置的。
public class Tester{
public static void main(String args[]){
int size=52;
while(size>0){
int rando=(int)Math.random()*size;
size--;
System.out.println(rando);
}
}
}
我的代码打印出全0,直到满足while循环的条件。我想知道如何生成一个介于0到52之间的随机整数。我知道Math.random();
会生成一个double,我认为类型转换存在问题。感谢。
答案 0 :(得分:7)
您只能投射Math.random()。它的值介于0和1之间(不包括1)。 如果你投了这个,那么无论如何都是零。
投出整个表达式:
(int)(Math.random()*size);
顺便说一句: 您的间隔时间仅为0到51(因为排除1。
如果您想要0 ... 52作为间隔,请使用(int)(Math.random()*(size+1));
。
答案 1 :(得分:3)
强制转换优先于乘法。由于Math.random()
会返回范围[0.0..1.0]中的双精度值,因此它将始终转换为0
,而将其与任何其他int
相乘的结果当然是{ {1}}。您可以在投射前执行乘法 - (0
),但实际上使用Random.nextInt(int)
会更容易。
答案 2 :(得分:2)
Math.random()返回一个域为[0,1)的伪随机数。
在行中:
int rando=(int)Math.random()*size;
将此值转换为int,然后乘以size。 要解决仅打印零的问题,您需要添加括号。
int rando = (int) (Math.random()*size);
这只会给你域中的数字[0,51] 解决这个问题:
int rando = (int) (Math.random()* (size + 1);
答案 3 :(得分:1)
是否需要使用Math类?
查找此数字的更简单方法是使用Random类
示例:
Random randomNumber = new Random ();
System.out.println(randomNumber.nextInt(53));
另见:
答案 4 :(得分:0)
您可以使用其他代码,例如java.util.Random:
Random r = new Random();
int rando = r.nextInt(53); //inclusive 0 and exclusive 53
如果是Math.random()和你的代码,你必须在乘法后进行强制转换(设置括号如下):
int rando = (int)(Math.random() * size);
在您的代码中,首先获取Math.random()的返回值,然后将其与size-parameter相乘。因为Math.random()在0和1之间返回double,所以转换为int返回0。
答案 5 :(得分:0)
您不能使用Math.random()在数字范围内生成随机整数,如docs中所示。
但您可以使用Random
包中的java.util
类,并使用方法.nextInt()
或更具体地.nextInt(int maximum)
,其中最大值为 53 ,而不是因为docs状态,该方法是独占的。
如果你想要一个特定范围(例如10到50)之间的数字,你可以构造一个这样的方法:
private final Random RANDOMISER = new Random();
private int generateRandomNumber(int from, int to){
return RANDOMISER.nextInt((to+1)-from)+from;
}