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 |