类参考设计:
User类
public class User {
private String username;//用户名
private double money;//余额
private boolean qz;//是否是群主
public void showinfo(){
if(qz){
System.out.print("!!我是群主!!\t");
}
System.out.print("用户名:"+username+"\t");
System.out.println("余额:"+money);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public boolean isQz() {
return qz;
}
public void setQz(boolean qz) {
this.qz = qz;
}
}
群主类Master:
import java.util.ArrayList;
import java.util.List;
//群主
public class Master extends User{
/**
* 包红包
* @param money 单个红包的金额
* @param num 红包数量
* @return 包好的红包
* @throws Exception
*/
public List<Double> packRedPacket(double money,int num){
if(num<1){
System.out.println("红包数量不能少于1");
return null;
}
if(money<=0.01){
System.out.println("单个红包金额不能小于0.01");
return null;
}
if(money*num>this.getMoney()){
System.out.println("余额不足");
return null;
}
//包num个金额为money的红包,存放在列表中
List<Double> list = new ArrayList<Double>();
for(int i=0;i<num;i++){
list.add(money);
}
//群主的余额减少
this.setMoney(this.getMoney()-money*num);
System.out.println("群主红包已经包好了!");
return list;
}
}
普通用户类Member:
import java.util.List;
import java.util.Random;
//普通成员
public class Member extends User{
/**
* 普通成员抢红包方法
* @param list 群主包好的红包
* @return 抢到的红包金额
*/
public double getRedPacket(List<Double> list){
if(list==null){
System.out.println("没有红包");
return 0;
}
if(list.size()==0){
System.out.println("红包已抢完");
return 0;
}
//生成一个随机数,表示随机抢到第几个红包
//由于此题目中群主包的红包金额一样,所以可以直接设置i的值为0.
int i = new Random().nextInt(list.size());
double d = list.get(i);
list.remove(i);
this.setMoney(this.getMoney()+d);
System.out.println(this.getUsername()+"抢到了一个"+d+"元的红包");
return d;
}
}
再写一个测试类,来测试我们的设计:
package cn.bobo;
import java.util.ArrayList;
import java.util.List;
public class MainTest {
//测试代码
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个群
List<User> qun = new ArrayList<User>();
//创建一个群主,加入该群
Master m = new Master();
m.setUsername("逆袭路人甲");
m.setMoney(100);
m.setQz(true);
qun.add(m);
//创建10个普通成员,加入改群
for(int i=0;i<10;i++){
Member u = new Member();
u.setMoney(10-i);
u.setUsername("小"+i);
u.setQz(false);
qun.add(u);
}
System.out.println("-------@1 开始测试----------");
System.out.println("--打印基本信息");
for(int i=0;i<qun.size();i++){
qun.get(i).showinfo();
}
System.out.println("-------@2 群主包红包---------");
//群主包了20个1.1元的红包
List<Double> list= m.packRedPacket(1.1, qun.size()-1);
System.out.println("-------@3 成员抢红包---------");
//注意,这里i从1开始,去掉了群主
for(int i=1;i<qun.size();i++){
Member mb = (Member) qun.get(i);
mb.getRedPacket(list);
}
System.out.println("-------@4 再次打印信息----------");
for(int i=0;i<qun.size();i++){
qun.get(i).showinfo();
}
}
}
我们再来看一下测试结果:
-------@1 开始测试----------
--打印基本信息
!!我是群主!! 用户名:逆袭路人甲 余额:100.0
用户名:小0 余额:10.0
用户名:小1 余额:9.0
用户名:小2 余额:8.0
用户名:小3 余额:7.0
用户名:小4 余额:6.0
用户名:小5 余额:5.0
用户名:小6 余额:4.0
用户名:小7 余额:3.0
用户名:小8 余额:2.0
用户名:小9 余额:1.0
-------@2 群主包红包---------
群主红包已经包好了!
-------@3 成员抢红包---------
小0抢到了一个1.1元的红包
小1抢到了一个1.1元的红包
小2抢到了一个1.1元的红包
小3抢到了一个1.1元的红包
小4抢到了一个1.1元的红包
小5抢到了一个1.1元的红包
小6抢到了一个1.1元的红包
小7抢到了一个1.1元的红包
小8抢到了一个1.1元的红包
小9抢到了一个1.1元的红包
-------@4 再次打印信息----------
!!我是群主!! 用户名:逆袭路人甲 余额:89.0
用户名:小0 余额:11.1
用户名:小1 余额:10.1
用户名:小2 余额:9.1
用户名:小3 余额:8.1
用户名:小4 余额:7.1
用户名:小5 余额:6.1
用户名:小6 余额:5.1
用户名:小7 余额:4.1
用户名:小8 余额:3.1
用户名:小9 余额:2.1