如何修复随机生成的5个数字的大小?

时间:2013-11-09 02:03:14

标签: java random

我使用java.util.Random随机生成数字。但是,我不能保持数字的长度固定。你能帮我吗?

4 个答案:

答案 0 :(得分:3)

要修复随机生成的数字的长度,通常您需要将随机数生成固定到一个范围。例如,如果您想生成一个6位长的随机数,则需要从100,000999,999的数字。您可以使用以下公式实现此目的。

Random r = new Random();
int randomNum = r.nextInt((max - min) + 1) + min;

max是最大数量,例如999999min是您的最小数量,例如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/