题目:
在一个群(有一个群主,四个群成员)中,群主给群成员发平均红包的简单实现。
分析:
1、群主和群成员都有姓名、余额,所以可以使用继承搞定。
2、发红包分析:
将发红包写成一个方法,方法名称为send,参数列表为总共发多少钱(int totalMoney)和发几个红包(int count),返回值为一个集合ArrayList<Integer>。
收红包的分析:
将收红包写成一个方法,方法名称为receive,参数列表为ArrayList<Integer>,返回值为void。
实现:
1、首先创建一个User父类,定义所需要的name、money,并且都设置为private(私有)。写一个方法,可以使群主、群成员调用而显示出各自的姓名、余额。写构造方法使群主成员创建时更便利。因为name、money都是私有的,所以还得写获取、设置姓名、余额的方法。具体代码为:
package demo15;
public class User {
private String name; //姓名
private int money; //余额
//展示一下当前用户有多少钱
public void show(){
System.out.println("我叫:"+name+"我有多少钱:"+money);
}
public User() {
}
public User(String name, int money) {
this.name = name;
this.money = 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;
}
//设置、修改参数的方法
}
2、再创建一个群主类,第一写构造方法,使新建群主时更加便利,第二写一个发红包的方法,发红包的方法是这样实现的,首先,新建一个集合用来存储红包的金额,其次对群主金额进行判断,判断所发金额是否超过余额,然后对红包金额进行计算(如果遇到除不尽的情况、将余数加到最后一个红包中),然后加到红包集合中。具体代码为:
package demo15;
import java.util.ArrayList;
//群主的类
public class Manager extends User{ //继承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 (totalMoney>leftMoney){
System.out.println("余额不足");
return redList; //返回空集合
}
//扣钱,其实就是重写设置余额
super.setMoney(leftMoney - totalMoney);
//发红包需要平均拆分成count份
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;
}
}
3、创建一个成员类,第一写构造方法,使新建群成员时更加便利,第二写一个收红包的方法,收红包的方法是这样实现的,首先产生一个随机数,随机数的范围为集合长度,根据随机数将集合中对应的元素删除并且加到自己的余额中。具体代码为:
package demo15;
import java.util.ArrayList;
import java.util.Random;
//普通成员
public class Member extends User{ //继承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);
}
}
4、创建一个发红包主体(main)的类,首先创建一个群主和四个成员,先看一下各自有多少钱,然后再调用send方法发送红包,调用receive方法收红包,最后再看一下各自有多少钱。具体代码为:
package demo15;
import java.util.ArrayList; //调用java.util下集合的包
public class MainRedPacket {
public static void main(String[] args) { //程序入口
Manager manager = new Manager("群主",100); //new一个群主
Member memberA = new Member("成员A",0);
Member memberB = new Member("成员B",0);
Member memberC = new Member("成员C",0);
Member memberD = new Member("成员D",0); //new四个成员
manager.show();
memberA.show();
memberB.show();
memberC.show();
memberD.show(); //调用show方法,查看各自姓名、余额
System.out.println("==================================");
//30块钱发4个红包
ArrayList<Integer> redlist = manager.send(30,4);
//四个成员收红包
memberA.receive(redlist);
memberB.receive(redlist);
memberC.receive(redlist);
memberD.receive(redlist);
//将集合中随机抽取的数值删除,并且将这个数值加入到自己余额中。
manager.show();
memberA.show();
memberB.show();
memberC.show();
memberD.show(); //调用show方法,查看各自收红包后的姓名、余额
}
}
5、运行后的结果:
我叫:群主我有多少钱:100
我叫:成员A我有多少钱:0
我叫:成员B我有多少钱:0
我叫:成员C我有多少钱:0
我叫:成员D我有多少钱:0
==================================
我叫:群主我有多少钱:70
我叫:成员A我有多少钱:9
我叫:成员B我有多少钱:7
我叫:成员C我有多少钱:7
我叫:成员D我有多少钱:7
总结:
本题用到了集合、方法调用、继承、构造方法等Java基本知识,比较综合,可供java初学者参考。
本文介绍了一个基于Java的群聊红包分配程序,通过群主发送平均红包给四位成员,利用继承、集合、方法调用等基础知识,实现了红包的发送与接收过程。
691

被折叠的 条评论
为什么被折叠?



