继承之----02抢红包案例

256 阅读3分钟

1、创建User类

package com.yueqian.day09_1.demo12;
/**
* 父类
* @author FPF
 *
 */
public class User {
    //添加成员变量
	private String username;//账户名
	private double leftMoney;//余额
	//添加构造方法
	public User() {
		super();
	}
	public User(String username, double leftMoney) {
		super();
		this.username = username;
		this.leftMoney = leftMoney;
	}
	//添加set../get..
	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+"元");
	}
}

2、创建群主类并继承user类

package com.yueqian.day09_1.demo12;

import java.util.ArrayList;

/**
 * 群主子类
 * 
 * @author FPF
 *
 */
public class QunZhu extends User{
	// 添加构造方法
	public QunZhu() {
		super();
	}
	public QunZhu(String username,double leftMoney) {
		//调用父类构造进行传参
		super(username, leftMoney);
	}
	/*
	群主发红包,就是把一个整数的金额,分成若干等份。
	   1.获取群主余额,是否够发红包.
	          不能则返回null,并提示.
	          能则继续.
	   2.修改群主余额.
	   3.拆分红包.
	     3.1.如果能整除,那么就平均分。
	     3.2.如果不能整除,那么就把余数分给最后一份。
	   @param
	   ArrayList<Double>:存储每一个红包;
	   double money:发送红包的总金额
	   int count:红包的个数
	*/
	public ArrayList<Double> send(int money, int count) {//200.5 10
		//1、获取群主的账户余额
		double leftMoney = getLeftMoney();
		//2、判断账户余额是否够发红包
		if(leftMoney<money) {
			return null;
		}
		//3、修改群主的账户余额(原余额-红包总金额)
		setLeftMoney(leftMoney-money);
		//4、拆分红包
		//4.1 创建一个集合存放每一个红包
		ArrayList<Double> list = new ArrayList<Double>();
		//4.2 扩大100倍,相当于折算成'分'为单位,避免小数运算损失精度的问题
		money = money*100;
		//4.3 每份的金额
	    double m = money/count;
		//4.4 不能整除的余数
	    double l = money%count;
	    //4.5 将除了最后一个红包以外的红包存放如集合(最后一个红包比较特殊)
	    for (int i = 0; i <count-1; i++) {
			list.add(m/100);
		}
	    //4.6 将最后一个红包存入集合
	    list.add((m+l)/100);
		return list;
		
	}
}

3、创建群员类并继承User类

package com.yueqian.day09_1.demo12;

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

/**
 * 普通群员
 * @author FPF
 *
 */
public class Member extends User{
	//添加构造方法
	public Member() {
		super();
	}
	public Member(String username,double leftMoney) {
		//访问父类的构造进行传参
		super(username, leftMoney);
	}
	/**
	 * 打开红包,就是从集合中,随机取出一份,保存到自己的余额中
	 * @param list:存放每一个红包
	 */
	public void openHongbao(ArrayList<Double> list) {
         //随机一个index
		 int index = new Random().nextInt(list.size());
		 //根据index从集合中移除一个红包
		 Double hongbao = list.remove(index);
		 //将红包金额存入账户余额
		 setLeftMoney(getLeftMoney()+hongbao);
	}
}

4、测试类

package com.yueqian.day09_1.demo12;

import java.util.ArrayList;

public class Test {

	public static void main(String[] args) {
		//创建群主
		QunZhu zhu = new QunZhu("群主", 2000);
		//创建群员
		Member zx = new Member("张三", 200);
		Member zx1 = new Member("李四", 20);
		Member zx2 = new Member("王五", 1500);
		
		//群主发红包
		System.out.println("群主发红包了!");
		ArrayList<Double> hongbao = zhu.send(10, 3);
		
		System.out.println("大家开始抢红包!");
		//群员开始抢红包
		zx.openHongbao(hongbao);
		zx1.openHongbao(hongbao);
		zx2.openHongbao(hongbao);
		
		System.out.println("显示账户余额:");
		//显示最新账户信息
		zhu.show();
		zx.show();
		zx1.show();
		zx2.show();

	}

}
案例虽小,记录平常所学的点点滴滴。记的点赞加关注oo

写在最后

推荐自己的Github地址:github.com/Lmobject