关于砍价功能:需求是 20个人砍5折,每人砍的折扣数成抛物线形状,也就是砍得折扣先降低再增加。这里做的砍价人数只支持偶数,折扣任意,但是20人砍的总和必须是定的折扣数。
/**
* 获取折扣数一定,人数一定,成抛物线形状的折扣概率
* @param num 只支持偶数
* @return
*/
public Double[] getDiscountArr(int num){
Double[] randomArr=new Double[num];
for(int i = 0 ;i< randomArr.length;i++){
double random=Math.random();
randomArr[i]=random;
}
Arrays.sort(randomArr);
//取间隔作为新的数组
Double[] discountPercent=new Double[num];
for(int i = 0 ;i<discountPercent.length-1;i++){
discountPercent[i]=randomArr[i+1]-randomArr[i];
}
double sum=0;
for (int i=0;i<discountPercent.length-1;i++) {
sum+=discountPercent[i];
}
discountPercent[num-1]=1-sum;
Arrays.sort(discountPercent);
Double[] descDiscountPercent=new Double[num/2];
Double[] ascDiscountPercent=new Double[num/2];
for(int i =0;i<discountPercent.length;i++){
if(i==0){
descDiscountPercent[i]=discountPercent[i];
}else if(i==1){
ascDiscountPercent[i-1]=discountPercent[i];
}else if(i%2==0){
descDiscountPercent[i/2]=discountPercent[i];
}else{
ascDiscountPercent[(i-1)/2]=discountPercent[i];
}
}
Double[] newDiscount=new Double[20];
for (int i=0;i<descDiscountPercent.length;i++){
newDiscount[i]=descDiscountPercent[descDiscountPercent.length-1-i];
}
for (int i=descDiscountPercent.length;i<newDiscount.length;i++){
newDiscount[i]=ascDiscountPercent[i-10];
}
return newDiscount;
}
然后每一个人砍价的折扣就从预定义的砍价数组里取就行