1.案例
羣主發普通紅包。某羣有多名成員,羣主給成員發普通紅包。普通紅包的規則:
- 羣主的一筆金額,從羣主餘額中扣除,平均分成n等份讓成員領取。
- 成員領取紅包後,保存到成員餘額中。
請根據描述,完成案例中所有類的定義以及指定類之間的繼承關係,並完成發紅包的操作。
2.案例分析
不管是羣主還是普通成員,他們都是一個用戶類,共性:姓名和餘額。
關鍵的方法有如下兩個:
3.代碼實現
3.1 定義用戶的類
public class User {
private String name;
private int money;
//無參構造
public User() {
}
//全參構造
public User(String name, int money) {
this.name = name;
this.money = money;
}
//展示一下當前用戶有多少錢
public void show(){
System.out.println("我是:" + name + ";我有多少錢:" + money);
}
//getter、 setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
}
3.2 繼承用戶類,定義羣主類
import java.util.ArrayList;
public class Manager extends User {
public Manager(){
// super();
}
//調用父類的構造方法
public Manager(String name, int money) {
super(name, money);
}
//定義發紅包方法
public ArrayList<Integer> send (int totalMoney,int count){
//首先需要一個集合,用來存儲若干個紅包的餘額
ArrayList<Integer> redList = new ArrayList<>();
//首先看一下羣主自己有多少錢
int leftMoney = super.getMoney();//羣主當前的餘額
if(totalMoney > leftMoney){
System.out.println("餘額不足");
return redList;//返回空集合
}
//扣錢,其實就是重新設置餘額
super.setMoney(leftMoney - totalMoney);
//發紅包平均拆分成爲count份
int avg = totalMoney / count;
int mod = totalMoney % count;//餘數,也就是甩下的零頭
//除不開的零頭,包在最後一個紅包中
//將紅包一個一個的放在集合中
for (int i = 0; i < count - 1; i++) {
redList.add(avg);
}
//最後一個紅包
int last = avg + mod;
redList.add(last);
return redList;
}
}
3.3 繼承用戶類,定義成員類
import java.util.ArrayList;
import java.util.Random;
public class Member extends User{
public Member() {
}
public Member(String name, int money) {
super(name, money);
}
public void receive(ArrayList<Integer>list){
//從多個紅包中,隨機抽取一個
//隨機獲取一個集合當中的索引編號
int index = new Random().nextInt(list.size());
//根據索引,從集合當中刪除,並且得到被刪除的紅包給自己
int del = list.remove(index);
//查看下 當前成員本身有多少錢
int money = super.getMoney();
//加法,並且重新設置回去
super.setMoney(money + del);
}
}
3.4 測試main
import java.util.ArrayList;
public class MainRedPacket {
public static void main(String[] args) {
Manager manager = new Manager("羣主", 100);
Member one = new Member("成員A", 0);
Member two = new Member("成員A", 0);
Member three = new Member("成員A", 0);
manager.show();
one.show();
two.show();
three.show();
System.out.println("==============");
//羣主發紅包,共發20,分三分
ArrayList<Integer>redList = manager.send(20,3);
//三個普通成員收紅包
one.receive(redList);
two.receive(redList);
three.receive(redList);
manager.show();
one.show();
two.show();
three.show();
}
}
執行結果: