发红包案例(普通红包和随机红包)

 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 }

猜你喜欢

转载自www.cnblogs.com/aoligei/p/12421013.html