前言
- 今天说些啥呢?想想谈谈随机数吧。随机数每种语言都会提供原生API供使用的。比如Java中提供的Math.random()
- 但是他有个缺点是生成的数据是浮点数。我们之前了解到浮点数的加减乘除是有坑的。而且有时候我们操作随机数希望他是整数的一个范围,那么这个我们又该如何去实现呢?
范围内整数随机数
public Integer getRandom(Integer min , Integer max){
return (int)(min+Math.random()*(max-min+1));
}
- 整段代码很简单就是基于Java原生api来实现的,首先我们生成原生的随机数。范围是0~1的随机数。我们按照范围扩大。
- 比如你要的1~100 , 之间差位是100 , 那么我们先扩大到100倍。这样100以内的都有机会。然后再讲100扩大的在最小值的基础上衍生。就是我们需要的随机数范围
比例生成随机数
- 这又是什么意思呢?随机就是随机,怎么还扯出来一个按比例呢?
- 我说一个场景,比如你在老师给学生进行打分的时候是需要维护一个原则的,A类有多少,B类有多少,C类有多少。
- 和这个按比例随机差不多。我们既要随机又要控制产生的概率比例。
public Object getRandByChange(Double[] calc, Object[] objArr) {
List<Double> randomList = Arrays.asList(calc)
LotteryUtil ll = new LotteryUtil(randomList)
int index = ll.randomColunmIndex()
if (index < objArr.length) {
return objArr[index]
}
return null
}
public Integer getNumByRand(Double calc, Integer num) {
List<Double> randomList = new ArrayList<>()
randomList.add(10000 * calc)
randomList.add(10000 - 10000 * calc)
LotteryUtil ll = new LotteryUtil(randomList)
int index = ll.randomColunmIndex()
if (index == 0) {
return num
}
/*Integer random = getRandom(0, 10000)
if (DoubleUtil.getInstance().sub(Double.valueOf(random), 100000 * calc) <= 0) {
return num
}*/
return 0
}
- 首先我们将候选接口存放在数组中,然后数组中索引代表权重会在新的数组中再用一定长度的内容。这样权重高的在数组中地位越大,那么随机到的可能性就越高。