1 package Red;
2
3 import java.util.ArrayList;
4 import java.util.Random;
5
6 /*理论上,每一个成员都有发红包和抢红包的权力,
7 直接将其写在member类中*/
8 public class Member {
9
10 private String name; //用户姓名
11 private double money; //用户金额
12
13 public Member() {
14 }
15
16 public Member(String name, double money) {
17 this.name = name;
18 this.money = money;
19 }
20
21 public String getName() {
22 return name;
23 }
24
25 public void setName(String name) {
26 this.name = name;
27 }
28
29 public double getMoney() {
30 return money;
31 }
32
33 public void setMoney(double money) {
34 this.money = money;
35 }
36
37 public void show() {
38 System.out.println(getName() + " " + String.format("%.2f", getMoney()));
39 }
40
41 //发普通红包
42 public ArrayList<Integer> sendCommon(int sendmoney, int count) {
43 ArrayList<Integer> list = new ArrayList<>();
44 if (getMoney() < sendmoney) {
45 System.out.println("账户余额不足");
46 return list;
47 }
48 setMoney(money - sendmoney); //设置发红包后的金额
49 int avg = sendmoney / count; //红包的平均金额
50 int mod = sendmoney % count; //红包的零头金额
51 for (int i = 0; i < count - 1; i++) {
52 list.add(avg); //将金额放到数组list中
53 }
54 list.add(avg + mod); //将最后的零头也放进去
55 return list;
56 }
57
58 public void receiveCommon(ArrayList<Integer> list) {
59 Random random = new Random();
60 int index = random.nextInt(list.size()); //随机生成一个随机数,从list数组中取出
61 int getmoney = list.remove(index);
62 setMoney(getmoney + getMoney()); //设置抢红包后的金额
63 }
64
65 public ArrayList<Double> sendRandom(double sendmoney, int count) {
66 ArrayList<Double> list = new ArrayList<>();
67 Random random = new Random();
68 if (money < sendmoney) {
69 System.out.println("账户余额不足");
70 return list;
71 }
72 setMoney(getMoney() - sendmoney);
73 //方便取随机数,余额一般只有两位有效数字,此时sendmoney相当于int类型
74 sendmoney = sendmoney * 100;
75 //开始随机出抢的金额,要求是最低不低于0.01元,最高不超过平均值的2倍
76 for (int i = 0; i < count - 1; i++) {
77 int randommoney = random.nextInt((int) sendmoney) + 1; //生成随机金额
78 while (randommoney <= 1 || randommoney >= 2 * (sendmoney / count)) { //没有强制类型转化也没报错
79 randommoney = random.nextInt((int) sendmoney) + 1; //保证在范围内
80 }
81 list.add((double)randommoney);
82 sendmoney = (int)sendmoney - randommoney; //控制下次随机金额
83 }
84 list.add((double) sendmoney); //最后的钱直接增加进去
85 return list;
86 }
87
88 public void receiveRandom(ArrayList<Double> list) {
89 Random random = new Random();
90 int index = random.nextInt(list.size()); //生成一个随机序号
91 double getmoney = list.remove(index); //获取数组list中的金额
92 getmoney = getmoney / 100;
93 setMoney(getmoney + getMoney()); //抢红包后的金额
94 }
95 }
1 package Red;
2
3 import java.util.ArrayList;
4 import java.util.Scanner;
5
6 public class demo1main {
7 public static void main(String[] args) {
8 System.out.println("选择以下发红包的种类:");
9 System.out.println("1.普通红包 2.拼手气红包");
10 Scanner scanner = new Scanner(System.in);
11 int num = scanner.nextInt();
12 while (num != 1 && num != 2) {
13 System.out.println("请输入正确格式,数字1或2");
14 num = scanner.nextByte();
15 }
16
17 Member member1 = new Member("张三", 100);
18 Member member2 = new Member("李四", 20);
19 Member member3 = new Member("王五", 20);
20 Member member4 = new Member("赵六", 20);
21 ArrayList<Integer> listcommon = new ArrayList<>();
22 ArrayList<Double> listrandom = new ArrayList<>();
23 if (num == 1) {
24 //使用普通红包的步骤
25 listcommon = member1.sendCommon(20, 3);
26 for (int i = 0; i < listcommon.size(); i++) {
27 System.out.println(listcommon.get(i));
28 }
29 member2.receiveCommon(listcommon);
30 member3.receiveCommon(listcommon);
31 member4.receiveCommon(listcommon);
32
33 member1.show();
34 member2.show();
35 member3.show();
36 member4.show();
37
38 } else {
39 //使用拼手气红包的步骤
40 listrandom = member1.sendRandom(20, 3);
41
42
43 member2.receiveRandom(listrandom);
44 member3.receiveRandom(listrandom);
45 member4.receiveRandom(listrandom);
46 member1.show();
47 member2.show();
48 member3.show();
49 member4.show();
50 }
51 }
52 }