产生任意数

来源:互联网 发布:nginx下载windows 编辑:程序博客网 时间:2024/05/17 22:36

以下代码主要实现的功能:

1、产生任意整数

2、产生任意double

3、产生任意区间整数

4、产生任意区间double类型数值

5、产生任意区间整数,并在区间内,可再定义一个小区间,小区间生成的数值占总区间的比率,可任意定制。

package com.paincupid.springmvc.util;import java.math.BigDecimal;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Random;/** * 产生任意数 * @author paincupid * @since 2016.07.11 */public class GenRandomValue {    private static Random random = new Random((new Date()).getTime());    public static Integer randomInt(){        return random.nextInt();    }    public static Integer randomPositiveInt(){        return Math.abs(random.nextInt());    }    /**     *   产生最小mix,最大max的随机任意     * @param mix     * @param max     * @return     * random.nextInt(100);          这行代码将生成范围 0~100 之间的随机数,有趣的是,取值可能为 0 ,但不可能为 100。我们用中学数学课学习的区间表示法,表示为:[0, 100)。     */    public static Integer randomRegionInt(int mix, int max){        return random.nextInt(max - mix + 1) + mix;    }    /**     * 产生最小值mix到最大值max,size个整数;其它区间begin~end之间的整数占比为rate     * 举个例子:randomRegionInt(20, 1, 10, 8, 9, 0.2); 生产1~10之间的10个整数,其中8~9区间的整数占比20%     * @param size  生产多少个整数     * @param mix   生产的最小整数     * @param max   生产的最大整数     * @param begin 生产整数区间最小值     * @param end       生产整数区间最大值     * @param rate  区间最小值和最大值在整个生产的总个数所占的比率     * @return     */    public static List<Integer> randomRegionInt(int size, int mix, int max, int begin, int end, double rate){        List<Integer> list = new ArrayList<Integer>(size);        int targetRateSize = (int)(size*rate);        for(int i=0; i<targetRateSize; i++){            list.add(random.nextInt(end - begin + 1) + begin);        }        int rest = size - targetRateSize;        for(int i=0; i<rest; i++){            int value = 0;            while(true){                value = random.nextInt(max - mix + 1) + mix;                if((value>mix && value<begin) || (value>end&& value<max)){                    list.add(value);                    break;                }            }        }        return list;    }    public static Double randomRegionDouble(int mix, int max){        double value = random.nextDouble()*(max-mix)+mix;        BigDecimal bd = new BigDecimal(value);        value = bd.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();        return value;    }    public static void main(String[] args) {        System.out.println("randomInt: "+ randomInt());        System.out.println("randomPositiveInt: "+ randomPositiveInt());        System.out.println("randomRegionInt: "+ randomRegionInt(7,10));        List<Integer> list = randomRegionInt(10, 1, 10, 8, 9, 0.2);        int count = 0;        for (Integer val : list) {            if(val == 8 || val ==9){                count++;            }        }        DecimalFormat df = new DecimalFormat("0.00");        float num= (float)count/list.size();        System.out.println("count: "+ count+", rate: " + df.format(num));    }}

转载请注明来源:paincupid csdn专栏
http://blog.csdn.net/paincupid/article/details/51873941

0 0