认识Java的第十天(下)——继承的综合案例

群主发红包

群主发红包,某群友多个成员,群主给成员发红包,普通红包的规则:
1、群主的一笔钱,从群主的余额总扣除,平均分成n份,让成员领取
2、成员领取钱,保存自己的余额中
在这里插入图片描述
用户的实体类:

public class User {
    //成员变量
    private String username;//用户名
    private double leftMoney;//余额
    //无参构造
    public  User(){}
    //有参构造
    public User(String username,double leftMoney){
        this.username=username;
        this.leftMoney=leftMoney;
    }
    // 展示信息的方法
  public void show(){
      System.out.println("用户姓名"+username+"余额"+leftMoney);
  }
  //get 和set方法
    public String getUsername() {
        return username;
    }

    public double getLeftMoney() {
        return leftMoney;
    }
    public void setLeftMoney(double leftMoney) {
        this.leftMoney = leftMoney;
    }
    public void setUsername(String username) {
        this.username = username;
    }
}

定义群主类:

import java.util.ArrayList;
public class QunZhu extends User {
    public QunZhu(){
    }
    public QunZhu(String username,double leftMoney){
        super(username,leftMoney);
    }
    /*
    * 群主发红包:
    * 1、获取群主的余额,是否够发红包
    *      不够的返回一个null
    * 2、修改群主的余额
    *    拆红包
    *       1、如果能整除,那个就平均分
    *       2、如果不能整除,那么就把余额分给最后一份
    * */
    public ArrayList<Double> send(int money,int count){
        //获取群主的余额信息
        double leftMoney= getLeftMoney();
        if (money>leftMoney){
            return null;
        }
        //修改群主的余额
        setLeftMoney(leftMoney-money);
        //创建集合,保存等额金额
        ArrayList<Double> list=new ArrayList<>();
        //扩大100倍,为了避免小数运算损失精度的问题
        money=money*100;
        //每份的金额
        int m=money/count;
        //除出来的余额
        int l=money%count;
        for (int i = 0; i <count-1 ; i++) {
            //缩小100倍
            list.add(m/100.00);
        }
        if (l==0){
            list.add(m/100.00);
        }else {
            list.add((m+1)/100.00);
        }
        return list;
    }
}

成员的类:

import java.util.ArrayList;
import java.util.Random;

public class Member extends User{
    public Member(){
    }
    public  Member(String username,double leftMoney){
        super(username,leftMoney);
    }
    public void open(ArrayList<Double> list){
        Random random=new Random();
        int index=random.nextInt(list.size());
        Double remove = list.remove(index);
        setLeftMoney(remove);
    }
}

import java.util.ArrayList;
import java.util.Scanner;
public class test04 {
    public static void main(String[] args) {
        QunZhu qunZhu=new QunZhu("群主",200);
        //键盘录入
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入金额:");
        int money=scanner.nextInt();
        System.out.println("请输入个数:");
        int count = scanner.nextInt();
        //发红包
        ArrayList<Double> send=qunZhu.send(money,count);
        if (send==null){
            System.out.println("余额不足。。。改天再发吧");
            return;
        }
        Member member=new Member("小白",0);
        Member member1=new Member("小红",0);
        Member member2=new Member("小黑",0);
        member.open(send);
        member1.open(send);
        member2.open(send);
        qunZhu.show();
        member.show();
        member1.show();
        member2.show();
    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值