随机拆分红包
用户抢红包
代码
import java.util.Arrays;
import java.util.Random;
public class RedPackageDemo{
private static double moneyNumer = 50;
private static int num = 4;
public static void main(String[] args) {
for(int i = 0;i<5;i++){
doIt(moneyNumer,num);
}
}
private static Random rand = new Random();
public static <T> void swap(T[] a, int i, int j){
T temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static <T> void shuffle(T[] arr) {
int length = arr.length;
for ( int i = length; i > 0; i-- ){
int randInd = rand.nextInt(i);
swap(arr, randInd, i - 1);
}
}
public static void doIt(double moneyP,int numP){
double money = moneyP;
int num = numP;
System.out.println("总金额:"+money+"元\t 拆分红包总个数:" + num);
Integer[] array = divived(money,num);
System.out.println("拆分后的各个红包金额数如下:");
for (int i:array){ System.out.print((double) i/100+"元\t"); }
System.out.println("\n=================================");
System.out.println("用户正在抢,当前有"+num+"个用户在抢!");
shuffle(array);
for(int i = 0 ;i<num;i++){
System.out.println("第"+(i+1)+"个用户抢到了:"+(double)array[i]/100+"元");
}
System.out.println("\n——————————————————————————————————");
}
public static Integer[] divived(double money, int n){
int fen = (int) (money*100);
if(fen < n || fen < 1){
throw new IllegalArgumentException("被拆分的总金额不能小于1分");
}
Integer[] array = new Integer[n];
Arrays.fill(array,1);
fen -= n;
int i = 0;
Random random = new Random();
while (fen > 1){
int f = random.nextInt(fen);
array[i++%n] += f;
fen -= f;
}
if (fen > 0){
array[0] += fen;
}
return array;
}
}