JAVA中随机生成确定范围内的随机数

最近工作中的一个业务需要再确定范围内取出一个随机数,网上到时搜出来一堆可以实现的方法,但是鄙人仍是理解不了,虽说已经copy方法直接完成工作了。今天抽时间整理下,希望能够帮助大家更好的理解随机数的实现原理;

1、网上直接找到的实现方法:

第一种实现方法:

public static String getRandom(int min, int max){
    Random random = new Random();
    int s = random.nextInt(max) % (max - min + 1) + min;
    return String.valueOf(s);

}

第二种实现方法:

public static String getRandom(int min, int max){
    int s = (int) (Math.random() * (max - min + 1) + min);
    return String.valueOf(s);
}

上述俩中方法均可实现确定范围内取出一个随机值的功能,但是我是没有一下看明白是如何实现的,下来把让大家一看就明白的方法贴出来;

public static String getRandom(int min, int max){
    Random random = new Random();
    int s = random.nextInt(max - min + 1) + min;
    return String.valueOf(s);

}

聪明的你是不是一下就看明白了,其实我们的random.nextInt(num)只能生成[0,num)范围内的随机数,若想生成[min,max]的随机数,我们可以先这样计算[min-min,max-min+1],于是我们就得出一个[0,max-min+1]这个范围,自然就可以计算出[0,,max-min+1]的随机数,然后将[0,,max-min+1]加上min,就是将这些随机数统一扩大min个,就可以得到[min,max+1]这个范围内的随机数。这样分析是不是很容易理解。