继承练习题1.0

发红包

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

  • 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取。
  • 成员领取红包后,保存到成员余额中。

请根据描述,完成案例中所有类的定义以及指定类之间的继承关系,并完成发红包的操作。

代码实现

定义父类

package demo11;

public class User {

    private String name; // 姓名
    private int money; // 余额,也就是当前用户拥有的钱数

    public User() {
    }

    public User(String name, int money) {
        this.name = name;
        this.money = money;
    }

    // 展示一下当前用户有多少钱
    public void show() {
        System.out.println("我叫:" + name + ",我有多少钱:" + money);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

定义群主类

package demo11;

import java.util.ArrayList;

// 群主的类
public class Manager extends User {

    public Manager() {
    }

    public Manager(String name, int money) {
        super(name, money);
    }

    public ArrayList<Integer> send(int totalMoney, int count) {
        // 首先需要一个集合,用来存储若干个红包的金额
        ArrayList<Integer> redList = new ArrayList<>();

        // 首先看一下群主自己有多少钱
        int leftMoney = super.getMoney(); // 群主当前余额
        if (totalMoney > leftMoney) {
            System.out.println("余额不足");
            return redList; // 返回空集合
        }

        // 扣钱,其实就是重新设置余额
        super.setMoney(leftMoney - totalMoney);

        // 发红包需要平均拆分成为count份
        int avg = totalMoney / count;
        int mod = totalMoney % count; // 余数,也就是甩下的零头

        // 除不开的零头,包在最后一个红包当中
        // 下面把红包一个一个放到集合当中
        for (int i = 0; i < count - 1; i++) {
            redList.add(avg);
        }

        // 最后一个红包
        int last = avg + mod;
        redList.add(last);

        return redList;
    }
}

定义成员类

package demo11;

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

// 普通成员
public class Member extends User {

    public Member() {
    }

    public Member(String name, int money) {
        super(name, money);
    }

    public void receive(ArrayList<Integer> list) {
        // 从多个红包当中随便抽取一个,给我自己。
        // 随机获取一个集合当中的索引编号
        int index = new Random().nextInt(list.size());
        // 根据索引,从集合当中删除,并且得到被删除的红包,给我自己
        int delta = list.remove(index);
        // 当前成员自己本来有多少钱:
        int money = super.getMoney();
        // 加法,并且重新设置回去
        super.setMoney(money + delta);
    }
}

定义测试类

package demo11;

import java.util.ArrayList;

public class MainRedPacket {

    public static void main(String[] args) {
        Manager manager = new Manager("群主", 100);

        Member one = new Member("成员A", 0);
        Member two = new Member("成员B", 0);
        Member three = new Member("成员C", 0);

        manager.show();
        one.show();
        three.show();
        System.out.println("===============");

        // 群主总共发20块钱,分成3个红包
        ArrayList<Integer> redList = manager.send(20, 3);
        // 三个普通成员收红包
        one.receive(redList);
        two.receive(redList);
        three.receive(redList);

        manager.show(); // 100-20=80
        // 6、6、8,随机分给三个人
        one.show();
        two.show();
        three.show();
    }

}

执行结果

原文地址:https://www.cnblogs.com/wurengen/p/11029527.html

时间: 2024-10-16 00:09:31

继承练习题1.0的相关文章

java 继承练习题8

按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个protected属性:矩形的宽width:矩形的高height. 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化: 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10. 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用 矩形的左上角坐标来标识,包含: 添加两

配置子目录Web.config使其消除继承,iis7.0设置路由

iis7.0设置路由 ,url转向,伪静态 <system.webServer>      <modules runAllManagedModulesForAllRequests="true" />      </system.webServer> 配置子目录Web.config使其消除继承 不用修改根目录的Web.config文件,而是修改子目录的Web.config.假设根目录的Web.config设置了一个名为 BlogEngine的连接字符串

Java继承 练习题

第一题 /* 看程序写结果: A:成员变量 就近原则 B:this和super的问题 this访问本类的成员 super访问父类的成员 C:子类构造方法执行前默认先执行父类的无参构造方法 D:一个类的初始化过程 成员变量进行初始化 默认初始化 显示初始化 构造方法初始化     用参数去调用构造函数就是显式初始化,没有参数就是默认初始化,表现为直接声明对象和数组 所以执行父类无参构造方法前会先执行成员变量的初始化,public int num = 10;,再执行无参构造方法,同理,执行完父类无参

java 继承练习题2

创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法). package com.hanqi; public class People { private double height; private double weight; public double getHeight() { return height; } public void setHeight(double height) { this.hei

java 继承练习题5

编写一个类A,该类创建的对象可以调用方法f输出小写的英文字母表.然 后再编写一个A类的子类B,要求子类B必须继承类A的方法f(不允许重写), 子类B创建的对象不仅可以调用方法f输出小写的英文字母表,而且可以调用子 类新增的方法g输出大写的英文字母表.最后 编写主类C,在主类的main方法 中测试类A与类B. public class A { public void f() { System.out.println("abcdefghijklmnopqrstuvwxyz"); } } p

面向对象之继承 练习题

1.下面这段代码的输出结果将是什么?请解释. class Parent(object): x = 1 class Child1(Parent): pass class Child2(Parent): pass print(Parent.x, Child1.x, Child2.x) ''' 1 1 1 ''' # 父类Parent名称空间有属性x,顾访问的是自己的x:子类Child1和Child2名称空间都没有属性x,故去父类Parent中找属性x,所以结果为.... Child1.x = 2 p

2020.02.19 String常用类练习题2.0

package com.guoyun.StirngTest; /** * ClassName: * Function: ADD FUNCTION * Reason: ADD REASON * * @author * @Date * @since Ver 1.1 */public class Test12 { public static void main(String[] args) { int count1=0,count2=0,count3=0; String str="ddejidsEFA

继承练习题,

主类: public class Role { // 共有属性 /** * 姓名属性---由玩家输入,可更改 */ private String name; private int level; private int hp; private int ac; private int dc; private int gold; public Role() { } /** * 角色类常用构造方法 * @param name 玩家姓名 * @param level 角色等级 * @param hp 角

java 继承练习题3

写一个Java应用程序,该程序包括3个类: A类.B类和主类E.其中 类B是类A的子类,在子类B中新增了成员变量和成员方法,并且隐藏了父类 A的成员变量和重写了父类A的成员方法.在主类E的main方法中,创建类B 的对象并赋给父类A的对象a,使用上转型对象a来测试上转型对象的一些特性. public class A { public int a; public void a1() { System.out.println("这是A的一个方法"); } } package com.han