发红包案例(练习Java继承案例)

Java继承保姆级讲解链接: https://blog.csdn.net/qq_43436117/article/details/113825027.

1.继承的综合案例

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

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

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

1.2 案例分析

在这里插入图片描述
在这里插入图片描述

1.3 案例实现

定义用户类(公共类,父类)

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 + "元"); 
	} 
}

定义群主类:

public class QunZhu extends User { 
	// 添加构造方法 
	public QunZhu() { }
	public QunZhu(String username, double leftMoney) { 
		// 通过super 调用父类构造方法 
		super(username, leftMoney); 
	}
	/* 群主发红包,就是把一个整数的金额,分层若干等份。 
	1.获取群主余额,是否够发红包. 不能则返回null,并提示. 能则继续. 
	2.修改群主余额. 
	3.拆分红包. 
		3.1.如果能整除,那么就平均分。 
		3.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; 
		// 无论是否整除,n‐1份,都是每份的等额金额 
		for (int i = 0; i < count ‐ 1; i++) { 
			// 缩小100倍,折算成 '元' 
			list.add(m / 100.0); 
		}
		// 判断是否整除 
		if (l == 0) { 
			// 能整除, 最后一份金额,与之前每份金额一致 
			list.add(m / 100.0); 
		} else { 
			// 不能整除, 最后一份的金额,是之前每份金额+余数金额
			list.add((m + l) / 100.00); 
		}
		// 返回集合 
		return list; 
	} 
}
	

定义成员类:

public class Member extends User { 
	public Member() { }
	public Member(String username, double leftMoney) { 
		super(username, leftMoney); 
	}
	// 打开红包,就是从集合中,随机取出一份,保存到自己的余额中 
	public void openHongbao(ArrayList<Double> list) { 
		// 创建Random对象 
		Random r = new Random(); 
		// 随机生成一个角标 
		int index = r.nextInt(list.size()); 
		// 移除一个金额
		double money = list.remove(index); 
		// 直接调用父类方法,设置到余额 
		setLeftMoney( money ); 
	} 
}

定义测试类:

public class Test { 
	public static void main(String[] args) { 
		// 创建一个群主对象 
		QunZhu qz = new QunZhu("群主" , 200); 
		// 创建一个键盘录入 
		Scanner sc = new Scanner(); 
		System.out.println("请输入金额:"); 
		int money = sc.nextInt(); 
		System.out.println("请输入个数:"); 
		int count = sc.nextInt(); 
		// 发送红包 
		ArrayList<Double> sendList = s.send(money,count); 
		// 判断,如果余额不足 
		if(sendList == null){ 
			System.out.println(" 余额不足..."); 
			return; 
		}
		// 创建三个成员 
		Member m = new Member(); 
		Member m2 = new Member(); 
		Member m3 = new Member(); 
		// 打开红包 
		m.openHongbao(sendList); 
		m2.openHongbao(sendList); 
		m3.openHongbao(sendList); 
		// 展示信息 
		qz.show(); 
		m.show(); 
		m2.show(); 
		m3.show(); 
	} 
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值