java综合案例:群主发红包 群主发普通红包。某群有多名成员,群主给成员发普通红包。普通红包的规则: @ (1)群主的一笔金额,从群主余额中扣除,分成n份,让成员领取随机金额。 (2)成员领取红包后,存储到成员的余额中。 请根据上述描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包、领红包的操作。
时间: 2024-02-15 19:03:45 浏览: 28
根据描述,可以定义以下类:
1. 群主类(GroupOwner):记录群主的余额,以及发普通红包的方法。
2. 成员类(Member):记录成员的余额,以及领取红包的方法。
3. 普通红包类(RedPacket):记录红包的金额、剩余金额、领取红包的方法。
其中,GroupOwner和Member类应该继承于一个共同的父类User,因为它们都具有余额这个属性。
以下是Java代码实现:
```java
// User类
public class User {
protected double balance; // 余额
public User(double balance) {
this.balance = balance;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
// GroupOwner类
public class GroupOwner extends User {
public GroupOwner(double balance) {
super(balance);
}
// 发普通红包
public void sendRedPacket(double amount, int count, ArrayList<Member> members) {
if (amount > balance) {
System.out.println("余额不足!");
return;
}
balance -= amount; // 扣除群主的一笔金额
RedPacket redPacket = new RedPacket(amount, count);
ArrayList<Double> amounts = redPacket.getRedPacket();
for (int i = 0; i < count; i++) {
Member member = members.get(i);
double memberAmount = amounts.get(i);
member.receiveRedPacket(memberAmount);
}
}
}
// Member类
public class Member extends User {
public Member(double balance) {
super(balance);
}
// 领取红包
public void receiveRedPacket(double amount) {
balance += amount;
System.out.println("领取了" + amount + "元红包,余额为" + balance + "元");
}
}
// RedPacket类
public class RedPacket {
private double amount; // 红包总金额
private int count; // 红包数量
private double leftAmount; // 剩余金额
private int leftCount; // 剩余数量
public RedPacket(double amount, int count) {
this.amount = amount;
this.count = count;
this.leftAmount = amount;
this.leftCount = count;
}
// 获取红包
public ArrayList<Double> getRedPacket() {
ArrayList<Double> amounts = new ArrayList<>();
if (leftCount == 0) {
System.out.println("红包已领完!");
return amounts;
}
if (leftCount == 1) {
amounts.add(leftAmount);
leftAmount = 0;
leftCount = 0;
} else {
double avg = leftAmount / leftCount;
double max = avg * 2;
Random random = new Random();
double amount = random.nextDouble() * max;
amount = amount < 0.01 ? 0.01 : amount;
amounts.add(amount);
leftAmount -= amount;
leftCount--;
amounts.addAll(getRedPacket());
}
return amounts;
}
}
```
使用示例:
```java
public class Main {
public static void main(String[] args) {
GroupOwner groupOwner = new GroupOwner(1000);
ArrayList<Member> members = new ArrayList<>();
members.add(new Member(0));
members.add(new Member(0));
members.add(new Member(0));
groupOwner.sendRedPacket(200, 3, members);
}
}
```
输出结果:
```
领取了60.89元红包,余额为60.89元
领取了80.29元红包,余额为80.29元
领取了58.82元红包,余额为58.82元
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)