Java - 获得从100到999的随机数

时间:2015-09-12 02:34:55

标签: java

请告诉我我是否正确使用以下一行。

int x = ((int)(Math.random() * 100000)) % 1000;

这一行总是给3个数字100999

有没有更简单的方法来输入它?我是否过分复杂了这段代码?

5 个答案:

答案 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。此处randomRandom的实例。

在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有解决方案。