import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
import java.util.Random;
import java.util.Scanner;
/**
* @author Charles
*
*/
public class RedPacket {
/**
* @param args
*/
static boolean Sys;
public static void main(String[] args) {
// TODO
ArrayList array=new ArrayList();
Sys=true; //修改Sys的值实现 手动输入scanner(false) 或者 随机生成输入(true)
while(Secondmin(array)); //判断为随机或平均
}
/**
* 判断用户输入是随机红包还是平均红包
* @param array
* main
* @return
* true or false
*/
public static boolean Secondmin(ArrayList array) {
Scanner scanner =new Scanner(System.in);
int decide;
boolean bool=false;
double sum=0;
System.out.println("随机红包(1)或平均红包(2): ");
decide=scanner.nextInt();
if(decide==1) {
sum=IntMoney();
array=IntRedRandomRedPacket(sum,IntNumberOfPeople()); //随机红包函数
}
else if(decide==2) {
sum=IntMoney();
array=IntEqualityRedPacket(sum,IntNumberOfPeople()); //平均红包函数
}
else
bool=true; //如果用户输入不为(1)或(2)不输出红包
if(!bool) {
printfMoney(array); //输出红包
printfMoneyTrade(array); //输出红包总额和人数
printfmixAndmaxMoney(array,sum); //输出红包的最大红包金额和最小红包金额
System.out.println("继续(1)或退出(2): ");
decide=scanner.nextInt();
if(decide==1)
bool=true; //继续
else
bool=false; //结束
}
return bool;
}
/**
* 随机红包
* @param ismoney
* 红包金额
* @param number_of_people
* 人数
* @return
* 随机生成的金额ArrayList
*/
public static ArrayList<Integer> IntRedRandomRedPacket(double ismoney,int number_of_people) {
ArrayList<Integer> array =new ArrayList<Integer>();
Random random =new Random();
int r=0; //随机数
int money=(int)(ismoney*100); //这里输入进来的钱是10元,要转化成1000分
while (number_of_people>1) { //循环发钱,到最后一位的时候结束循环
r=random.nextInt((int)(money*0.6))+1; //如果有1000分,第一个人抢到400分,下次循环的前就剩下600分
array.add(r);
money-=r;
number_of_people--;
}
array.add(money); //剩下的钱给最后一个人
return array;
}
/**
* 平均红包
* @param ismoney
* 红包金额
* @param isnumber_of_people
* 人数
* @return
* 平均生成的金额ArrayList
*/
public static ArrayList<Integer> IntEqualityRedPacket(double ismoney,int isnumber_of_people) {
ArrayList<Integer> array =new ArrayList<Integer>();
int money=(int)(ismoney*100);
int number_of_people=isnumber_of_people;
while (isnumber_of_people>1) {
array.add(money/number_of_people); //循环发钱,到最后一个人结束循环
isnumber_of_people--;
}
array.add(money%number_of_people+money/number_of_people); //剩下的钱全部给最后
//如果有1000分分给3个人,最后分到的就是334
return array;
}
/**
* 随机生成红包金额或手动输入红包金额
* @return
* 红包金额
*/
public static double IntMoney() {
boolean decide=Sys;
double money;
Scanner scanner =new Scanner(System.in);
Random random=new Random();
if (decide) {
money=(int)(random.nextInt(100000)+1); //true 生成随机数
money/=100.0;
}
else {
System.out.println("请输入红包的金额: "); //false scanner 输入
money=scanner.nextDouble();
}
return money;
}
/**
* 随机生成抢红包的人数或手动输入人数
* @return
* 人数
*/
public static int IntNumberOfPeople() {
boolean decide=Sys;
int number;
Scanner scanner =new Scanner(System.in);
Random random=new Random();
if (decide) { //true 生成随机数
number=(int)(random.nextInt(10)+1);
}
else {
System.out.println("请输入抢红包的人数: "); //false scanner 输入
number=scanner.nextInt();
}
return number;
}
/**
* 输出红包
* @param array
* main
*/
public static void printfMoney(ArrayList array) {
Iterator<Integer> interator =array.iterator();
int s=0;
while(interator.hasNext()) {
s=interator.next();
System.out.printf("%.2f\n",s/100.0);
}
}
/**
* 输出红包总金额和抢红包的人数
* @param array
* main
*/
public static void printfMoneyTrade(ArrayList array) {
Iterator<Integer> interator =array.iterator();
int s = 0;
while(interator.hasNext()) {
s+=interator.next();
}
System.out.printf("红包总金额为 %.2f元 ",s/100.0);
System.out.printf("抢红包人数为"+array.size()+"人 ");
}
/**
* 输出最小红包金额和最大红包金额
* @param array
* secondmin()
* @param money
* intmoney
*/
public static void printfmixAndmaxMoney(ArrayList array,double money) {
Iterator<Integer> interator = array.iterator();
int s=0;
int mix=(int)(money*100);
int max=s;
while (interator.hasNext()) {
s=interator.next();
if(s<mix)
mix=s;
if(s>max)
max=s;
}
System.out.printf(" 最小红包金额为 %.2f元 ",mix/100.0);
System.out.printf(" 最大红包金额为 %.2f元 \n\n",max/100.0);
}
}