如何在特定范围内生成随机int值?

以下方法存在与整数溢出相关的错误:

randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.

当前回答

以下代码生成100000到900000之间的随机数。此代码将生成六位数的值。我用这个代码生成一个六位数的OTP。

使用importjava.util.Random来使用此随机方法。

import java.util.Random;

// Six digits random number generation for OTP
Random rnd = new Random();
long longregisterOTP = 100000 + rnd.nextInt(900000);
System.out.println(longregisterOTP);

其他回答

Use:

minValue + rn.nextInt(maxValue - minValue + 1)

可以使用以下代码:

ThreadLocalRandom.current().nextInt(rangeStart, rangeEndExclusive)

你可以使用

RandomStringUtils.randomNumeric(int count)

该方法也来自Apache Commons。

在尝试1中进行以下更改应该可以完成工作-

randomNum = minimum + (int)(Math.random() * (maximum - minimum) );

检查此项以获取工作代码。

public static void main(String[] args) {

    Random ran = new Random();

    int min, max;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter min range:");
    min = sc.nextInt();
    System.out.println("Enter max range:");
    max = sc.nextInt();
    int num = ran.nextInt(min);
    int num1 = ran.nextInt(max);
    System.out.println("Random Number between given range is " + num1);

}