请告诉我我是否正确使用以下一行。
int x = ((int)(Math.random() * 100000)) % 1000;
这一行总是给3
个数字100
到999
?
有没有更简单的方法来输入它?我是否过分复杂了这段代码?
答案 0 :(得分:12)
有一种更好的方法可以获得随机数,而java.util.Random
就是这样。 Math.random()
返回一个双(浮点)值,但根据您对3位数字的请求,我将假设您真正想要的是一个整数。所以这就是你做的。
// initialize a Random object somewhere; you should only need one
Random random = new Random();
// generate a random integer from 0 to 899, then add 100
int x = random.nextInt(900) + 100;
答案 1 :(得分:2)
Math.random()
返回0.0
(包括)和1.0
之间的值(不包括)说它返回0.05013371..
(例如),而您的方法将执行以下操作,
0.05013371.. * 100000 = 5013.371...
(int) 5013.371... = 5013
5013 % 1000 = 13 // Incorrect
但是其他方式你仍然可以用不同的方式使用Math.random()
来解决这个问题,
int upperBound = 999;
int lowerBound = 100;
int number = lowerBound + (int)(Math.random() * ((upperBound - lowerBound) + 1));
解释
100 + (int)((Number >= 0.0 and < 1.0) * (999 - 100)) + 1;
100 + (int)((Number >= 0.0 and < 1.0) * (899)) + 1;
MIN 这可以返回,
100 + (int)(0.0 * (899)) + 1;
100 + 0 + 1
101
MAX 这可以返回,
100 + (int)(0.9999.. * (899)) + 1;
100 + 898 + 1
999
注意:您可以相应地更改 upper 和 lower 绑定以获得所需的结果。
答案 2 :(得分:1)
你不正确。这可以在100
下产生数字。最熟悉的方式是random.nextInt(900)+100
。此处random
是Random
的实例。
在Java 7之前,没有理由为此目的在应用程序中创建多个Random
实例。现在没有理由拥有,最好的方法是
int value = ThreadLocalRandom.current().nextInt(100, 1000);
答案 3 :(得分:0)
我不认为你在这里所做的是恰当的。您应该创建一个Random
对象。
Random random = new Random();
int randomNumber = random.nextInt(900) + 100;
现在randomNumber
必须是三位数。
我写了一个程序来测试你的方法是否正确:
int x = 0;
int count = 0;
do {
x = ((int)(Math.random() * 100000)) % 1000;
count++;
} while (Integer.toString(x).length() == 3);
System.out.println ("Finished after " + count + " tries");
它说&#34; 4次尝试后完成&#34;,这意味着你的方法不正确。
答案 4 :(得分:0)
代码中存在错误。它也可以返回小于100的数字。以下链接Math.random() explained有解决方案。