``前几次写了4个小的Dome来熟悉这个平台的编辑模式,也很少注释的代码,对于初学者来说有时很难理解,所以接下来的代码我将添加详细的注释语句,并在注释外介绍相关的知识点,希望大家好好理解,然后就是多敲代码多敲代码了,哈哈哈哈
下面介绍一个微信红包的案例,实现语言为Java
首先我们来看看本节内容要用到的知识点有哪些,发红包一般都是在微信群里吧,有时也会时个人对个人发,这里我们讲的是在微信群里实现一下发送普通红包的案例,那他用到的最主要的两个知识点就是集合(ArrayList)和面向对象的继承。
User类的分析
首先我们想,发红包肯定有发红包的人,和抢红包的人对吧,那么发红包和抢红包的人有什么公共的属性吗,答案肯定是有的,他们都有名字和余额两个属性,所以很容易得到User类,他是发红包和抢红包类的爸爸,所以就先有user类代码如下:
//用户类,从群主,和普通成员提取出来的公共属性
public class User {
private String name;
private float money;
//写一个show方法来显示余额
public void show() {
System.out.println("该用户为:"+name+"当前余额为:"+money);
}
public User() {
super();
}
public User(String name, float money) {
super();
this.name = name;
this.money = money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getMoney() {
return money;
}
public void setMoney(float money) {
this.money = money;
}
}
既然已经有了父类了那就要出现子类来继承他,下面看发红包的类,代码中使用群主来代表:
群主类
public class Manager extends User {
//两个构造方法来更好使用
public Manager() {
super();
// TODO 自动生成的构造函数存根
}
public Manager(String name, float money) {
super(name, money);
// TODO 自动生成的构造函数存根
}
//发红包的方法
//jemoney是群主发红包的金额,count是红包的个数
public ArrayList<Float> send(float jemoney,int count ){
//首先需要一个集合来存储若干红包的金额
ArrayList<Float> redArrayList=new ArrayList<Float>();
//获取群主的余额
float leftmoney=super.getMoney();
//首先判断一下群主的余额是否大于发的红包的金额
if(jemoney>leftmoney){
System.out.println("余额不足");
return redArrayList;//返回空集合,一个安全检查
}else {
//扣钱,重新设置余额
super.setMoney(leftmoney-jemoney);
float avg=jemoney/count;
float mod=jemoney%count;//余数,就是剩下的零头
//把红包放进集合中
for(int i=0;i<count;i++) {
redArrayList.add(avg);
}
float last=avg+mod;
redArrayList.add(last);
}
return redArrayList;
}
}
同样下面是抢红包的类
public class Member extends User{
public Member() {
}
public Member(String name, float money) {
super(name, money);
// TODO 自动生成的构造函数存根
}
public void receiver(ArrayList<Float> list) {
//从多个红包当中随机抽取一个给我自己
//随机获取集合当中的一个数据
int index=new Random().nextInt(list.size());
//根据索引从集合中删除,并且得到删除的红包
float delta=list.remove(index);
//当前成员自己本来有多少钱
float money=super.getMoney();
//重新设置回去,跟新现在的余额
super.setMoney(money+delta);
}
}
最后是Main类
public class main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//创建群主对象
Manager manager=new Manager("群主",100);
//创建成员
Member one=new Member("群员1",0);
Member two=new Member("群员2",0);
Member three=new Member("群员3",0);
manager.show();
one.show();
two.show();
three.show();
System.out.print("=================="+"\n");
//创建一个集合来调用群主类里的send方法,传入参数
ArrayList<Float> redlist=manager.send(20,3);
//三个普通成员手红包
one.receiver(redlist);
two.receiver(redlist);
three.receiver(redlist);
manager.show();
one.show();
two.show();
three.show();
}
}
下面贴一下运行结果
大家思考一下为什么这里会三个数相加出现大于20块的情况,我发了20,结果他们收到了21块多,那这部分多出来的是怎么回事呢?答案也很简单:
就是我们采用了float这个类型20/3会是6.6666…所以就出现了这样的情况。
最后求一波关注和点赞,嘤嘤嘤