Java中在特定区间产生随机数和随机字符

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37283570/article/details/78468138
package chapter6;

import java.util.Random;

/**
 * @author: 努力努力丶
 * @date:2017年11月7日 下午2:36:42
 * 
 */
public class RandomTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random random=new Random();
        //产生[1~100]的随机数
        int r=random.nextInt(100-1+1)+1;
        System.out.println(r);
        //产生‘a’~‘z’的随机字符
        char c=(char) (random.nextInt(26)+'a');
        System.out.println(c);

    }

}

对于产生特定区间数:

多次运行,结果每次都不同,但取值一定会在 1 和 100 之间,可能出现 1 和 100。
同理,很容易知道如果要获得随机两位整数,代码写成:
rand.nextInt(90) + 10;
你一定很惊讶,为什么是这么写出来的。其实,在 nextInt() 方法中作为参数的数字 90 表示:你希望生成的随机数的所有取值的可能性的数量(在本命题中,两位整数取值为 [10, 99],共90个数);加好后面的数字 10 ,表示区间的最小取值。
你可以验证下,按照这样理解,[1, 100] 的随机数,是不是应该写成 rand.nextInt(100) + 1 。千万不要把参数 100 理解为最大取值。只是区间 [1, 100] 正好从 1 开始,所以最大取值和取值可能性数量正好同为 100。
因此,
生成随机三位数的代码为:
rand.nextInt(900) + 100;
生成区间 [64, 128] 中随机值的代码为:
rand.nextInt(65) + 64;
取值可能性的数量是如何计算出来的呢?当然是 最大取值-最小取值+1 ,所以,有最终公式如下:
// For Java

// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
int randNumber = rand.nextInt(MAX - MIN + 1) + MIN;

在微软平台下,由于 .Net Framework 提供了相应的方法来生成固定区间的整数,所以公式为:

// For C#

// randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数
int randNumber = rand.Next(MIN, MAX + 1); 

猜你喜欢

转载自blog.csdn.net/qq_37283570/article/details/78468138