事件起因

  最近大部分精力都投入到公司系统的重构上,经历了几波人之手的代码,改起来真是苦不堪言。
  原本的代码当中,很多地方都有产生随机数这一项,但是都各有各的写法,十分不统一。
  想了想还是统一写个随机数工具类来解决,也方便后期的调用。

实现代码

/**
 * 随机数工具类
 * Created by zhh on 2017/08/01.
 */
public class RandomUtils {
    
    /**
     * 生成指定区间随机数 (min, max)
     * @param min    区间最小值(不包含)
     * @param max    区间最大值(不包含)
     * @return
     */
    public static int genNum(int min, int max) {
        if (min >= max - 1) {
            // 自行异常处理, 此时简单返回0
            return 0;
        }
        Random random = new Random();
        return random.nextInt(max - min - 1) + min + 1;
    }
    
    /**
     * 生成指定区间随机数 [min, max)
     * @param min    区间最小值(包含)
     * @param max    区间最大值(不包含)
     * @return
     */
    public static int genNumIncludeMin(int min, int max) {
        if (min >= max) {
            // 自行异常处理, 此时简单返回0
            return 0;
        }
        Random random = new Random();
        return random.nextInt(max - min) + min;
    }
    
    /**
     * 生成指定区间随机数 (min, max]
     * @param min    区间最小值(不包含)
     * @param max    区间最大值(包含)
     * @return
     */
    public static int genNumIncludeMax(int min, int max) {
        return genNumIncludeMin(min, max) + 1;
    }
    
    /**
     * 生成指定区间随机数 [min, max]
     * @param min    区间最小值(包含)
     * @param max    区间最大值(包含)
     * @return
     */
    public static int genNumIncludeMinAndMax(int min, int max) {
        if (min >= max + 1) {
            // 自行异常处理, 此时简单返回0
            return 0;
        }
        Random random = new Random();
        return random.nextInt(max - min + 1) + min;
    }
    
    /**
     * 生成指定长度随机数
     * @param len    指定长度
     * @return
     */
    public static int genNumByLen(int len) {
        if (len < 1 || len > 9) {
            // 自行异常处理, 此时简单返回0
            return 0;
        }
        return Integer.valueOf(genNumStrByLen(len));
    }
    
    /**
     * 生成指定长度随机数
     * @param len    指定长度
     * @return
     */
    public static String genNumStrByLen(int len) {
        if (len < 1) {
            // 自行异常处理, 此时简单返回"0"
            return "0";
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < len; i++) {
            if (i == 0) {
                sb.append(genNumIncludeMax(0, 9));
            } else {
                sb.append(genNumIncludeMinAndMax(0, 9));
            }
        }
        return sb.toString();
    }
}

代码用例

  每个方法对应我都写了注释,所以这里就不再过多解释了。只是注明的异常处理的地方需要自行单独抛异常或者其他处理。
  代码用例如下(各行后所带注释为对应的返回结果):

    public static void main(String[] args) {
        System.out.println(genNum(2, 4));    // 3
        System.out.println(genNumIncludeMin(2, 4));    // 2,3中随机一个数
        System.out.println(genNumIncludeMax(2, 4));    // 3,4中随机一个数
        System.out.println(genNumIncludeMinAndMax(2, 4));    // 2,3,4中随机一个数
        System.out.println(genNumByLen(3));    // 100至999中随机一个数, 返回结果为数字
        System.out.println(genNumStrByLen(3));    // 100至999中随机一个数, 返回结果为字符串
    }

  目前只是这些简单的随机数生成方法,后期若还有其他随机数需求,我会在此继续完善。


黑豪Horace
53 声望3 粉丝

I code my dream.