用Java语言实现抢平均红包或随机红包

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

}

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值