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 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); } }