java实现发红包案例(一)
题目要求
编码实现群主发红包,群成员收红包的功能。
分析
1、群主发红包是一个特有方法
三要素:
返回值类型:arrayList
方法名称:send()
参数列表:红包总金额(totalMoney)、红包个数(total)
2、群成员收红包是一个特有方法
三要素:
返回值类型:void
方法名称:receive()
参数列表:arrayList
3、群主和群成员均有同样的属性:姓名、余额
定义一个user父类,让群主和群成员均可以继承其中的姓名和余额。
继承的概念:
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的格式:
class 父类 { } class 子类 extends 父类 { }
讯享网
程序设计思路
1、创建一个父类User来储存Manager和Member的共有属性name和money;
讯享网class User { private string name; private int money; } class Manager extends User { } class Member extends User { }
2、创建子类Manager和Member,除了继承父类User的属性外,还要分别自定义特有方法发红包send()和收红包receive();
判断群主的余额是否大于要发的红包金额,如果是则进行发红包操作;
public ArrayList<Integer> send(int totalMoney,int count){ //创建一个集合储存若干个红包的金额 //将金钱塞进红包用ArraryList来实现储存,在这操作之前需要将金钱均分为total等份 //如有出现除不尽的情况可以将最后金钱余数(mod)放在最后一个红包内 //使用for循环,通过redList.add(avg);完成塞红包的动作 //返回redList } public void receive(ArrayList<Integer> list){ //使用Random随机产生红包redList中的index坐标(取值范围为[0,redList.size())) //将该index对应的红包删除并赋值给群成员,更新redList.size(),for循环完成红包的分发 }
java 代码:
- main函数
讯享网package test_1.demo05; import java.util.ArrayList; public class MainRedPacket {
public static void main(String[] args) {
Manager manager = new Manager("群主",520); Member one = new Member("群成员1",0); Member two = new Member("群成员2",10); Member three = new Member("群成员3",30); //显示未发红包前各成员的余额 manager.show(); one.show(); two.show(); three.show(); System.out.println("=========="); System.out.println("群主开始发红包"); ArrayList<Integer> redList = manager.send(100,3); //普通群成员收红包 one.receive(redList); two.receive(redList); three.receive(redList); manager.show(); one.show(); two.show(); three.show(); System.out.println("======="); } }
- User 父类
package test_1.demo05; 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 int getMoney() {
return money; } public void setName(String name) {
this.name = name; } public void setMoney(int money) {
this.money = money; } }
- Manger子类
讯享网package test_1.demo05; 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(leftMoney<totalMoney){
System.out.println("余额不够,请充值再发红包,谢谢!"); return redList; } // else // System.out.println("请输入红包金额和红包个数"); //重新设置余额 super.setMoney(leftMoney - totalMoney); //将红包金额拆分进total个红包内 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; } }
- Member子类
package test_1.demo05; 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); } }
运行结果

这个发红包demo是一个很基本的包含继承、构建方法和调用方法的demo,里面还有很多细节没有处理好,比如当群主发的红包金额比账户余额大时,该怎么处理,还有就是红包分发会有随机金额和平均金额两种模式,这里还么实现随机金额的功能,后面会更新博客进行代码的优化。
Memorial Day is 354 days |

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/73475.html