我正在使用随机生成数字java.util.Random
。但是,我不能保持数字的长度固定。你能帮我吗?
4 回答
要固定随机生成数的长度,通常您需要将随机数生成固定到一个范围内。例如,如果您想生成一个 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中。
long randomLong = Long.valueOf(s.toString()).longValue();
与其考虑生成一个整数,不如考虑生成一个 15 位数字的字符串,每个数字都在所需的范围内。
您可以使用 nextInt(int) 来选择每个数字。
如果您可以使用库:
RandomStringUtils.random(15, "12345")
会给你这样的字符串:124444211351355,长度为 15
我只是碰巧写了一篇关于这个的帖子(无耻的自我广告链接:http ://united-coders.com/nico-heid/generating-random-numbers-strings-java/ )
首先要考虑的是int
不能容纳 15 位数字。它就是不能。它最多只能达到 2 32 -1,即 9 位长。Along
最多可以容纳 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());
}
}
它从值零开始,循环 15 次,每次首先将该值乘以 10(另一个 BigInteger 预分配值),然后将新值添加到 1 的位置。它这样做了 15 次。
完成后,可以将其值作为字符串、长整数或其他格式获取 - 或继续将其用作 BigDecimal(如果您决定想要 20 位长整数值,这是必要的)。
运行上述代码会产生如下输出:
313455131111333 245114532433152 531153533113523