Java基础 第二节 第十三课

举报
我是小白呀iamarookie 发表于 2021/09/10 01:33:37 2021/09/10
1.1k+ 0 0
【摘要】 继承的综合案例 综合案例案例分析案例实现定义用户类定义群主类定义成员类定义测试类 综合案例 群主法普通红包. 某群有多名成员, 群主给成员发普通红包. 普通红包规则: 群主的一笔金额...

综合案例

群主法普通红包. 某群有多名成员, 群主给成员发普通红包. 普通红包规则:

  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;
    }

    // get/set方法
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public double getLeftMoney() {
        return leftMoney;
    }

    public void setLeftMoney(double leftMoney) {
        this.leftMoney = leftMoney;
    }

    // 展示信息的方法
    public void show(){
        System.out.println("用户名: " + username + ", 余额为: " + leftMoney + "元");
    }
}

  
 

定义群主类

import java.util.ArrayList;

public class Admin extends User {
    // 构造方法
    // 无参构造
    public Admin(){

    }
    // 有参构造
    public Admin(String username, double leftMoney){
        // 通过super调用父类构造方法
        super(username, leftMoney);
    }
    public ArrayList<Double> send(int money, int count){
        // 获取群主余额
        double leftMoney = getLeftMoney();
        if (money > leftMoney){
            return null;
        }
        // 修改群主余额
        setLeftMoney(leftMoney - money);

        // 创建一个集合, 保存等分金额
        ArrayList<Double> arrayList = new ArrayList<>();

        // 扩大100倍, 相当于拆算成 "分" 为单位, 避免小数运算损失精度的问题
        money = money * 100;

        // 每份的金额
        int serving = money / count;
        // 不能被整除的余数
        int leftover = money % count;

        // 无论是否整除, n-1份, 都是每份的等额金额
        for (int i = 0; i < count - 1; i++) {
            // 缩小100倍吗折算成 "元"
            arrayList.add(serving / 100.00);
        }

        // 最后一份金额
        arrayList.add((serving + leftover) / 100.00);

        // 返回集合
        return arrayList;
    }
}

  
 

定义成员类

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 openRedPackage(ArrayList<Double> arrayList){
        // 创建Random对象
        Random r = new Random();
        // 随机生成一个角标
        int index = r.nextInt(arrayList.size());
        // 移除一个金额
        Double money = arrayList.remove(index);
        // 直接调用父类方法,设置到余额
        setLeftMoney(money);
    }
}

  
 

定义测试类

import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // 创建一个群主对象
        Admin admin = new Admin("群主",200);

        // 创建一个键盘录入
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入金额:");
        int money = sc.nextInt();
        System.out.println("请输入个数:");
        int count = sc.nextInt();

        // 发送红包
        ArrayList<Double> sendList = admin.send(money,count);

        // 判断,如果余额不足
        if(sendList == null){
            System.out.println(" 余额不足...");
            return;
        }

        // 创建三个成员
        Member m1 = new Member();
        Member m2 = new Member();
        Member m3 = new Member();

        // 打开红包
        m1.openRedPackage(sendList);
        m2.openRedPackage(sendList);
        m3.openRedPackage(sendList);

        // 退还余额
        double left = 0;
        for (Double aDouble : sendList) {
            left += aDouble;
        }
        admin.setLeftMoney(admin.getLeftMoney() + left);

        // 展示信息
        admin.show();
        m1.show();
        m2.show();
        m3.show();
    }
}

  
 

文章来源: iamarookie.blog.csdn.net,作者:我是小白呀,版权归原作者所有,如需转载,请联系作者。

原文链接:iamarookie.blog.csdn.net/article/details/110123584

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。