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

类参考设计:

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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值