0

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

4

4 回答 4

3

要固定随机生成数的长度,通常您需要将随机数生成固定到一个范围内。例如,如果您想生成一个 6 位长的随机数,您需要从100,000到 的数字999,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中。

long randomLong = Long.valueOf(s.toString()).longValue();
于 2013-11-09T02:15:06.710 回答
1

与其考虑生成一个整数,不如考虑生成一个 15 位数字的字符串,每个数字都在所需的范围内。

您可以使用 nextInt(int) 来选择每个数字。

于 2013-11-09T02:25:34.927 回答
0

如果您可以使用库:

RandomStringUtils.random(15, "12345")

会给你这样的字符串:124444211351355,长度为 15

我只是碰巧写了一篇关于这个的帖子(无耻的自我广告链接:http ://united-coders.com/nico-heid/generating-random-numbers-strings-java/ )

于 2013-11-09T09:48:02.423 回答
0

首先要考虑的是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
于 2013-11-09T02:56:19.923 回答