package com.xzx.gc.common.utils;
|
|
import lombok.experimental.UtilityClass;
|
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.List;
|
|
@UtilityClass
|
public class RandomUtil {
|
|
/**
|
* 随机指定范围内N个不重复的数
|
* 最简单最基本的方法
|
* @param min 指定范围最小值
|
* @param max 指定范围最大值
|
* @param n 随机数个数
|
*/
|
public int[] randomCommon(int min, int max, int n){
|
if (n > (max - min + 1) || max < min) {
|
return null;
|
}
|
int[] result = new int[n];
|
int count = 0;
|
while(count < n) {
|
int num = (int) (Math.random() * (max - min)) + min;
|
boolean flag = true;
|
for (int j = 0; j < n; j++) {
|
if(num == result[j]){
|
flag = false;
|
break;
|
}
|
}
|
if(flag){
|
result[count] = num;
|
count++;
|
}
|
}
|
return result;
|
}
|
|
/**
|
* 将sum分成n份
|
* @param n
|
* @param sum
|
* @param flag true元素可以为0 false元素不可以为0
|
* @return
|
*/
|
public int[] splitInteger(int n, int sum,boolean flag) {
|
//随机抽取n-1个小于sum的数
|
List<Integer> list = new ArrayList();
|
//将0和sum加入到里list中
|
list.add(0);
|
//判断生成的正整数集合中是否允许为0,true元素可以为0 false元素不可以为0
|
if (!flag) {
|
sum = sum - n;
|
}
|
list.add(sum);
|
int temp = 0;
|
for (int i = 0; i < n - 1 ; i++) {
|
temp = (int) (Math.random() * sum);
|
list.add(temp);
|
}
|
Collections.sort(list);
|
int[] nums = new int[n];
|
for (int i = 0; i < n; i++) {
|
nums[i] = list.get(i + 1) - list.get(i);
|
if (!flag) {
|
nums[i] += 1;
|
}
|
}
|
return nums;
|
}
|
|
public static void main(String[] args) {
|
splitInteger(3,10,false);
|
}
|
}
|