【发布时间】:2014-10-28 22:15:08
【问题描述】:
我想在 java 中生成任何特定数字的随机数(比如 5,即 10000 到 99999)。我该怎么做?
【问题讨论】:
标签: java
我想在 java 中生成任何特定数字的随机数(比如 5,即 10000 到 99999)。我该怎么做?
【问题讨论】:
标签: java
在0,10^k - 10^(k-1) 范围内创建一个随机整数,并在您的示例中添加10^(k-1)。范围0,90000,加10000。
使用Random.nextInt(int) 方法。
类似:
new Random().nextInt(90000) + 10000
【讨论】:
rand.nextInt(upper - lower) + lower;
nextLong() % number 来获得一个长范围(0,数字)。如果您的数字大于多头,您将需要BigInteger。您可以创建多个长整数,直到填充 k-1 位数字(包括前导零),然后在 [1,9] 范围内生成一个数字,并使其成为最重要的数字。
简单。
- 生成一个最大为89999的随机数
- 每个生成的数字加 10000。
【讨论】:
以下是处理负值和正值范围的方法。计算范围大小内的随机数,然后添加下限。例如。如果范围是 100-150,则计算一个介于 0 和 50 之间的数字并加上 100。这适用于正范围和负范围。
import java.util.Random;
public class ArbitraryRange {
public static void main(String []args){
int start = -10000;
int end = -5000;
Random rand = new Random();
int r = rand.nextInt(end - start) + start;
System.out.println(r);
}
}
【讨论】:
public int generateRandom() {
Random r = new Random( System.currentTimeMillis() );
return 10000 + r.nextInt(20000);
}
这是来自here
或:
for (int i = 0; i < 10; i++) {
System.out.println(Math.round(Math.random() * 89999) + 10000);
}
【讨论】:
以下应该有效:
public int getRandomNumber(int digits)
{
assert digits > 0; //added because of comment
BigInteger tenPower = new BigInteger("10");
return new Random().nextInt((tenPower.pow(digits).subtract(tenPower.pow(digits-1))).intValue()) + tenPower.pow(digits-1).intValue();
}
输出:
Digits: 1
- Random nextInt Param: 9
- Adding: 1
Random number: 1
Digits: 2
- Random nextInt Param: 90
- Adding: 10
Random number: 66
Digits: 3
- Random nextInt Param: 900
- Adding: 100
Random number: 377
Digits: 4
- Random nextInt Param: 9000
- Adding: 1000
Random number: 1734
Digits: 5
- Random nextInt Param: 90000
- Adding: 10000
Random number: 96602
所以它会创建这样的数字:
1...9
10...99
100...999
1000...9999
10000...99999
【讨论】:
0。除此之外,它很酷。如果需要,您也可以将其更改为 long 或保留为 BigInteger。
negative digit count 的含义,甚至是0 digits 的数字。如果您愿意,我可以添加一个断言以防止这种情况发生。正如我所说,如果您愿意,可以将其保留为 BigInteger,但如果您想处理大量数字。