生成具有指定位数Java的随机整数

Ton*_*alo 8 java random

我今天遇到了这个问题,我确信有一个我没想到的优雅解决方案.

假设我想在Java中生成一个具有指定位数的随机整数(或长整数),其中这个位数可以改变.

即将多个数字传递给方法,并返回具有指定位数的随机数

例)N = 3,产生100-999之间的随机数; N = 4,生成1000-9999之间的随机数

private long generateRandomNumber(int n){

/*Generate a random number with n number of digits*/

}
Run Code Online (Sandbox Code Playgroud)

到目前为止我的尝试(这有效,但看起来很乱)

private long generateRandomNumber(int n){

    String randomNumString = "";

    Random r = new Random();

    //Generate the first digit from 1-9
    randomNumString += (r.nextInt(9) + 1);

    //Generate the remaining digits between 0-9
    for(int x = 1; x < n; x++){
        randomNumString += r.nextInt(9);
    }

    //Parse and return
    return Long.parseLong(randomNumString);

}
Run Code Online (Sandbox Code Playgroud)

有没有比这更好/更有效的解决方案?

*有很多解决方案可以在指定的范围内生成随机数,我对给定一定数量的数字生成随机数的最佳方法更加好奇,并且使解决方案足够强大以处理任意数量的数字.

我不想传递最小值和最大值,而只需要传递所需的位数

zap*_*apl 11

private long generateRandomNumber(int n) {
    long min = (long) Math.pow(10, n - 1);
    return ThreadLocalRandom.current().nextLong(min, min * 10);
}
Run Code Online (Sandbox Code Playgroud)

nextLong产生下限包含和上限独占之间的随机数,因此用参数调用它,(1_000, 10_000)例如结果数字1000到9999. Random遗憾的是,Old 没有得到那些漂亮的新功能.但无论如何基本上没有理由继续使用它.


and*_*ucz 5

public static int randomInt(int digits) {
    int minimum = (int) Math.pow(10, digits - 1); // minimum value with 2 digits is 10 (10^1)
    int maximum = (int) Math.pow(10, digits) - 1; // maximum value with 2 digits is 99 (10^2 - 1)
    Random random = new Random();
    return minimum + random.nextInt((maximum - minimum) + 1);
}
Run Code Online (Sandbox Code Playgroud)