1.红包类
public abstract class HongBao {
//属性:
//定义红包数量:
int HBcount;
//定义红包金额
double HBmoney;
//定义构造器
public HongBao(int HBcount, double HBmoney) {
this.HBcount = HBcount;
this.HBmoney = HBmoney;
}
//方法:
public abstract ListsendRedEnvelops();
}
2.抢红包人的一个类
public class Person{
//属性:
//微信名:
Stringname;
//抢了多少钱:
int shareMoney;
//构造器
public Person(String name) {
this.name = name;
}
@Override
public StringtoString() {
return name;
}
}
3.继承父类实现抽象方法:
public class SpellLickRedEnvelopsextends HongBao {
//构造器
public SpellLickRedEnvelops(int HBcount, double HBmoney) {
super(HBcount, HBmoney);
}
//重写父类抽象方法
@Override
public ListsendRedEnvelops() {
//定义List集合,存放分好的红包
List list =new ArrayList();
/*
红包如何进行分配
比如:20 分5个红包:
第一人:2.4
第二人:7.8
第三人:最低:0.01
最高:20-2.4-7.8
剩余的金额 - 剩余的人数*/
//将红包金额从元变成分 1元 = 100分
int samllmoney = (int) (super.HBmoney *100);
//发红包的准备动作:
//定义初始红包余额:
int balance = samllmoney;
//定义初始的红包剩余数量:
int count =super.HBcount;
//分红包:??每个红包分多少钱:
for (int a =1; a <=super.HBcount; a++) {
//每一次循环就是一个红包:
//当前这个红包分了多少钱:??最低:0.01【1 最高: 剩余的金额 - 剩余的人数】
/*
{1-5}随机数*/
int amount =0;
if (a !=super.HBcount) {//如果不是最后一个红包就随机抢
Random r =new Random();//随机数
amount = r.nextInt(balance - (super.HBcount - a));//[0,5) + 1 = [1,5]
}else{//如果是最后一个红包就把剩余的都给了
amount = balance;
}
//将红包放入List集合中
list.add(amount);
//余额减掉:
balance = balance - amount;
}
return list;
}
}
4.测试类
public class Demo {
//这是main方法,程序入口
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.print("请问你要发几个红包:");
int count = sc.nextInt();
System.out.print("请问你要发多少元:");
int money = sc.nextInt();
//选择一个微信群,在群中发红包,群众好友有谁?
//定义一个集合,这个集合中就存放群中能抢红包的人:
List list =new ArrayList();
list.add(new Person("丽丽"));
list.add(new Person("娜娜"));
list.add(new Person("小明"));
list.add(new Person("小红"));
list.add(new Person("群主"));
list.add(new Person("加红"));
list.add(new Person("卫星"));
list.add(new Person("阿斯顿"));
//给这些人发红包
SpellLickRedEnvelops s =new SpellLickRedEnvelops(count, money);
//发红包
List moneylist = s.sendRedEnvelops();
//给随机的人发随机的红包:
Random r =new Random();
for (int a = moneylist.size(); a >0; a--) {
//随机的成员下标:
int m = r.nextInt(list.size());
//随机红包下标:
int n = r.nextInt(moneylist.size());
//通过成员的下标得到成员
Person p = list.get(m);
//通过红包的下标得到这个红包的金额
p.shareMoney = moneylist.get(n);
//已经抢过红包的人要从集合中移除
list.remove(m);
//已经分配的红包金额 从集合中移除m
moneylist.remove(n);
//打印抢红包信息:
System.out.println(p.name +"抢到了" + p.shareMoney /100.00 +"元");
}
//如果没有抢到红包就提示
for (int a =0; a < list.size(); a++) {
System.out.println(list.get(a) +"手慢了,该换手了!");
}
}
}