具有给定长度的Java随机数

Mar*_*hin 36 java random

我需要在Java中使用正好6位的随机数进行生成.我知道我可以在一个随机数上循环6次但是在标准Java SE中有没有其他方法可以做到这一点?

编辑 - 跟进问题:

现在,我可以生成我的6位数,我遇到了一个新问题,我正在尝试创建的整个ID是语法123456-A1B45.那么我如何随机化最后5个可以是AZ或0-9的字符?我正在考虑使用char值和randomice一个介于48 - 90之间的数字,并简单地删除任何获得代表58-64的数字的值.这是要走的路还是有更好的解决方案?

编辑2:

这是我的最终解决方案.谢谢你所有的帮助!

protected String createRandomRegistryId(String handleId)
{
    // syntax we would like to generate is DIA123456-A1B34      
    String val = "DI";      

    // char (1), random A-Z
    int ranChar = 65 + (new Random()).nextInt(90-65);
    char ch = (char)ranChar;        
    val += ch;      

    // numbers (6), random 0-9
    Random r = new Random();
    int numbers = 100000 + (int)(r.nextFloat() * 899900);
    val += String.valueOf(numbers);

    val += "-";
    // char or numbers (5), random 0-9 A-Z
    for(int i = 0; i<6;){
        int ranAny = 48 + (new Random()).nextInt(90-65);

        if(!(57 < ranAny && ranAny<= 65)){
        char c = (char)ranAny;      
        val += c;
        i++;
        }

    }

    return val;
}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 72

要生成一个6位数字:

使用RandomnextInt如下:

Random rnd = new Random();
int n = 100000 + rnd.nextInt(900000);
Run Code Online (Sandbox Code Playgroud)

请注意,n永远不会是7位数(1000000),因为nextInt(900000)最多可以返回899999.

那么如何随机化最后5个可以是AZ或0-9的字符呢?

这是一个简单的解决方案:

// Generate random id, for example 283952-V8M32
char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
Random rnd = new Random();
StringBuilder sb = new StringBuilder((100000 + rnd.nextInt(900000)) + "-");
for (int i = 0; i < 5; i++)
    sb.append(chars[rnd.nextInt(chars.length)]);

return sb.toString();
Run Code Online (Sandbox Code Playgroud)


Bom*_*mbe 22

生成从100000到的范围内的数字999999.

// pseudo code
int n = 100000 + random_float() * 900000;
Run Code Online (Sandbox Code Playgroud)

我很确定你已经阅读了例如Random的文档,并且可以自己弄清楚其余部分.

  • 坏伪代码和糟糕的态度 (6认同)
  • 什么是`random_float()`?? (4认同)

Cha*_*ara 6

如果需要指定精确的字符长度,我们必须避免使用前面的0值.

最终字符串表示必须具有确切的字符长度.

String GenerateRandomNumber(int charLength) {
        return String.valueOf(charLength < 1 ? 0 : new Random()
                .nextInt((9 * (int) Math.pow(10, charLength - 1)) - 1)
                + (int) Math.pow(10, charLength - 1));
    }
Run Code Online (Sandbox Code Playgroud)


Tob*_*ias 5

试试这个:

public int getRandomNumber(int min, int max) {
    return (int) Math.floor(Math.random() * (max - min + 1)) + min;
}
Run Code Online (Sandbox Code Playgroud)