综合案例:群主发普通红包

类参考设计:

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 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 list = new ArrayList();
        for(int i=0;i//群主的余额减少
        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 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 qun = new ArrayList();

        //创建一个群主,加入该群
        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;iget(i).showinfo();
        }

        System.out.println("-------@2 群主包红包---------");
        //群主包了20个1.1元的红包
        List list= m.packRedPacket(1.1, qun.size()-1);

        System.out.println("-------@3 成员抢红包---------");
        //注意,这里i从1开始,去掉了群主
        for(int i=1;iget(i);
            mb.getRedPacket(list);
        }

        System.out.println("-------@4 再次打印信息----------");
        for(int i=0;iget(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

你可能感兴趣的:(基础理解)