我使用java.util.Random
随机生成数字。但是,我不能保持数字的长度固定。你能帮我吗?
答案 0 :(得分:3)
要修复随机生成的数字的长度,通常您需要将随机数生成固定到一个范围。例如,如果您想生成一个6位长的随机数,则需要从100,000
到999,999
的数字。您可以使用以下公式实现此目的。
Random r = new Random();
int randomNum = r.nextInt((max - min) + 1) + min;
max
是最大数量,例如999999
,min
是您的最小数量,例如100000
。
修改强>
根据您的评论,我发现您正在尝试生成一个仅包含1-5个数字的15位数字。这是一种简单的方法:
import java.util.Random;
StringBuilder s = new StringBuilder();
Random r = new Random();
for (int i = 0; i < 15; i++) {
s.append(r.nextInt(5) + 1);
}
System.out.println("The random number is: " + s.toString());
如@MichaelT所述,15位数字不适合整数。如果你需要对它进行操作,你应该把它存储很长时间。
long randomLong = Long.valueOf(s.toString()).longValue();
答案 1 :(得分:1)
不要考虑生成一个整数,而是考虑生成一个15位的字符串,每个字符串都在所需的范围内。
您可以使用nextInt(int)来选择每个数字。
答案 2 :(得分:0)
要考虑的第一件事是int
不能容纳15位数。它只是不能。它最多只能达到2 32 -1,长度为9位。 long
最多可以包含19个数字 - 但如果想要解决一般情况,则需要使用BigInteger
包。
请记住,BigInteger是一个不可变对象(如String),因此在循环时必须重新赋值。
package com.michaelt.so.random15;
import java.math.BigInteger;
import java.util.Random;
public class Main {
public static void main(String[] args) {
Random r = new Random();
BigInteger result = BigInteger.ZERO;
for(int i = 0; i < 15; i++) {
result = result.multiply(BigInteger.TEN)
.add(BigInteger.valueOf(r.nextInt(5)+1));
}
System.out.println(result.toString());
}
}
它以值ZERO开始,循环15次,每次首先将值乘以10(另一个BigInteger预分配值),然后将新值添加到1的位置。这样做了15次。
完成后,可以将其值作为字符串或长格式或其他格式获取 - 或继续将其用作BigDecimal(如果您决定需要20位长的值,则必需)。
上述代码的运行产生输出,例如:
313455131111333 245114532433152 531153533113523
答案 3 :(得分:0)
如果你可以使用库:
RandomStringUtils.random(15, "12345")
会给你这样的字符串:124444211351355,长度为15
我刚刚写了一篇关于那篇文章的帖子(无耻的自我广告链接:http://united-coders.com/nico-heid/generating-random-numbers-strings-java/)