给定长度的Java随机数

给定长度的Java随机数,java,random,Java,Random,我需要在Java中生成一个正好有6位数字的随机数。我知道我可以在randomicer上循环6次,但是在标准JavaSE中还有其他方法可以做到这一点吗 编辑-后续问题: 现在我可以生成我的6个数字了,我遇到了一个新问题,我试图创建的整个ID的语法是123456-A1B45。那么我如何随机分配最后5个字符,可以是A-Z或0-9?我正在考虑使用char值和randomice值来表示48-90之间的一个数字,并简单地删除表示58-64的数字的任何值。这是一条出路还是有更好的解决方案 编辑2: 这是我最后

我需要在Java中生成一个正好有6位数字的随机数。我知道我可以在randomicer上循环6次,但是在标准JavaSE中还有其他方法可以做到这一点吗

编辑-后续问题:

现在我可以生成我的6个数字了,我遇到了一个新问题,我试图创建的整个ID的语法是123456-A1B45。那么我如何随机分配最后5个字符,可以是A-Z或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;
}
受保护的字符串createRandomRegistryId(字符串handleId)
{
//我们想要生成的语法是DIA123456-A1B34
字符串val=“DI”;
//字符(1),随机A-Z
int-ranChar=65+(new Random()).nextInt(90-65);
char ch=(char)ranChar;
val+=ch;
//数字(6),随机0-9
随机r=新随机();
整数=100000+(整数)(r.nextFloat()*899900);
val+=字符串。valueOf(数字);
val+=“-”;
//字符或数字(5),随机0-9a-Z

对于(int i=0;i生成一个介于
100000
999999
之间的数字

// pseudo code
int n = 100000 + random_float() * 900000;
有关更多详细信息,请参阅文档中的生成一个随机数(始终在0-1之间)并乘以1000000

Math.round(Math.random()*1000000);

编辑:修复了off-by-1错误并删除了无效的解决方案。

要生成6位数字,请执行以下操作:

使用和如下所示:

Random rnd = new Random();
int n = 100000 + rnd.nextInt(900000);
请注意,
n
永远不会是7位(1000000),因为
nextInt(900000)
最多只能返回
899999

// pseudo code
int n = 100000 + random_float() * 900000;
那么我如何将最后5个字符(可以是A-Z或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();
//生成随机id,例如283952-V8M32
char[]chars=“abcdefghijklmnopqrstuvxyz012456789”;
随机rnd=新随机();
StringBuilder sb=新StringBuilder((100000+rnd.nextInt(900000))+“-”;
对于(int i=0;i<5;i++)
sb.追加(字符[rnd.nextInt(字符长度)]);
使某人返回字符串();
试试这个:

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

那对你有用吗

public class Main {

public static void main(String[] args) {
    Random r = new Random(System.currentTimeMillis());
    System.out.println(r.nextInt(100000) * 0.000001);
}
}


结果例如0.019007

对于后续问题,您可以获得一个介于36^5和36^6之间的数字,并将其转换为36进制

更新:

使用此代码

是写的
BaseConverterUtil.toBase36(60466176+r.nextInt(211636160))

但在您的用例中,可以通过使用
StringBuilder
对其进行优化,并将编号按相反顺序转换,即ie 71应转换为Z1而不是1Z


编辑:

如果需要指定确切的字符长度,我们必须避免前面有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));
    }
String GenerateRandomNumber(int charLength){
返回字符串.valueOf(charLength<1?0:new Random()
.nextInt((9*(int)Math.pow(10,charLength-1))-1)
+(int)Math.pow(10,charLength-1));
}

投票重新打开。范围内的随机数与给定长度的随机数略有不同。似乎我有点晚了:)您可以跳过参数到
currentTimeMillis
Random()
构造函数有一个更好的方法。Random\u float()是一个伪代码函数(即它不存在),它返回一个介于0(包括)和1(排除)之间的随机浮点数。谢谢你,这非常有效!我的后续问题也有什么解决方案吗?错误的伪代码和错误的态度。899999的一个大数字不一定会导致统一的随机化。应该是
nextInt()
而不是
getNextInt()
谢谢你的回答,但我不确定你的意思是什么?你能再解释一下吗?