目录

群发普通红包

流程图

MainRedPacket类

Manager类

Member类

User类


群发普通红包

题目介绍

某软件有多名用户(User类),某群聊中有群主(Manager类)和多名普通成员(Member类),现群主大方给成员发红包。红包的规则:群主发一笔金额,从群主余额中扣除,红包分配方式有两种:1普通红包:平均分成n等份给成员。2随机红包:随机红包大小分配给成员。成员拿到红包后,保存到成员余额中,最后并显示每个人抢到了多少红包。

流程图

运行效果图

MainRedPacket类

这个类的作用有

第一创造对象 并确定人的名字然后初始的余额

第二输入选择发多少钱 注意不能大于余额

第三选择是平均还是随机发

然后调用函数来执行对应的方法

最后输出

package 练习.week9.T5;
import java.util.ArrayList;
import java.util.Scanner;
public class MainRedPacket {public static void main(String[] args) {int fenfa;int cont;Scanner scanner = new Scanner(System.in);Manager manager = new Manager("群主",10000);Member one = new Member("1",0);Member two = new Member("2",0);Member three = new Member("3",0);Member four = new Member("4",0);Member five = new Member("5",0);System.out.println("======抢红包钱=======");one.show();two.show();three.show();four.show();five.show();//发多少钱System.out.println("发多少钱");fenfa=scanner.nextInt();System.out.println("什么方式发");cont=scanner.nextInt();if(cont==1){System.out.println("=============金主发了"+fenfa+"大红包拉================");ArrayList<Double> redList = manager.sent(fenfa,5);//成员收红包one.receive(redList);two.receive(redList);three.receive(redList);four.receive(redList);five.receive(redList);}else {//调用方法Manager manager1 = new Manager();manager1.RedEnvelope(fenfa,5);ArrayList<Double> redList = manager1.redList;//成员收红包one.receive(redList);two.receive(redList);three.receive(redList);four.receive(redList);five.receive(redList);}//输出one.show();two.show();three.show();four.show();five.show();}
}

Manager类

这个是一个关键类

其中第一个sent方法的作用为平均分发这是平均的算法然后放入集合方便下一步随机用户抢红包

但是这样最后一个人会抢的多因为如果除不尽的话会把剩下的放入最后

int avg = totalMoney / count;
        int mod = totalMoney % count;

第二个RedEnvelope方法的作用是随机分发这是平均刷法 因为要保证每个人都要抢到钱所以要设置最小值为0.01 然后余额减去随机生成的数 然后最后剩下的给最后放入集合

String money = formatter.format(random.nextDouble() * (Max - Min) + Min);
            //将String类转换为double类,修改Max的值
            Max = Double.valueOf(formatter.format(Max - Double.valueOf(money)));

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Random;//群主的类
public class Manager extends User {public Manager(){}public Manager(String name, int money) {super(name, money);}
public ArrayList<Double> redList = new ArrayList<>();public ArrayList<Double> sent(int totalMoney, int count){//平均分//储若干个红包金额//首先看一下自己有多少钱double 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++) {System.out.println("第"+i+"个红包"+avg);redList.add((double)avg);}//最后一个红包double last = avg + mod;System.out.println("最后一个红包"+last);redList.add(last);return redList;}public void RedEnvelope(double moneySum,int redNum) {//随机分double Min=0.01;//最小金额double Max=moneySum;//记录余额double zhuan;Random random=new Random();NumberFormat formatter = new DecimalFormat("#.##");//数字格式化成小数点后2位for(int i=1;i<redNum;i++) {//随机生成Min到Max的随机数并规范到2位小数,是String类String money = formatter.format(random.nextDouble() * (Max - Min) + Min);//将String类转换为double类,修改Max的值Max = Double.valueOf(formatter.format(Max - Double.valueOf(money)));System.out.println("第"+i+"个红包:"+money+"元");zhuan=Double.parseDouble(money);redList.add(zhuan);}System.out.println("第"+redNum+"个红包:"+Max+"元");redList.add(Max);}
}

Member类

这个类的作用是receive方法读取前面的集合数据然后用户调用这个方法来随机获取集合里面的元素相当于抢红包

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<Double> list){//随机获取一个集合当中的索引编号int index = new Random().nextInt(list.size());double dalta = list.remove(index);//当前成员自己本来有多少钱double money = super.getMoney();//加法,并且从新设置回去super.setMoney((money + dalta));}
}

User类

这个类的作用是定义成员的名字和余额 然后等待前面的程序执行完成时候用户调用show方法来输出抢红包之后余额一共有多少钱

//用户类
public class User {private String name;private double money; //余额public User() {}public User(String name, double money) {this.name = name;this.money = money;}//展现一下当前用户有多少钱public void show(){System.out.println("我叫:" + name + ",我有多少钱:" + money);}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}
}

红包算法关于---随机分发和平均分发相关推荐

  1. 微信红包算法设计-随机红包

    ''' 我考虑了一个简单的算法: 比如100元,由10个人分,那么平均一个人是10元钱.然后付款后,系统开始分份儿. 第一份:系统由0-10元之间随机一个数,作为这一份的钱数,设x1. 第二份:剩下的 ...

  2. php固定红包 + 随机红包算法

    1 需求 CleverCode最近接到一个需求,需要写一个固定红包 + 随机红包算法. 1 固定红包就是每个红包金额一样,有多少个就发多少个固定红包金额就行. 2 随机红包的需求是.比如红包总金额5元 ...

  3. 随机红包 java_微信随机生成红包金额算法java版

    最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public class WxAlgorithm{ / ...

  4. 基于国密算法实现主机之间的密钥分发和安全传输-2021西北工业大学网络空间安全学院暑期夏令营

    2021年西北工业大学网络空间安全学院暑期夏令营 一.设计内容与要求: 二.基本思路与实现: 三.设计原理与流程: 3.1 总体流程: 3.2 设计原理: 3.2.1 建立套接字连接: 3.2.2 根 ...

  5. 微信手气红包算法 php,PHP实现微信/QQ手气红包,随机算法分享

    最近有个客户找我实现扫码抢手气红包,大家平时都在使用微信/QQ收发红包,玩的不亦乐乎.大家在抢红包,而程序员在研究红包算法.那么手气红包的随机分配算法是怎么实现的呢?怎么保证每个人都领得到,而且满足正 ...

  6. php红包退回通知,PHP红包算法

    PHP红包算法 玩微信都喜欢抢微信红包,那么大家了解过PHP红包算法是怎么样的'吗?下面小编为大家解答一下,希望能帮到您! 算法原理如下 /* * 获取随机红包 * min * min(n-1) &l ...

  7. 拼手气红包算法_二倍均值法

    使用二倍均值法进行的拼手气红包算法 假设M为总金额,N为抢红包人数,那么根据二倍均值法,每次抢到的金额 = 随机区间 (0, M / N X 2) 这个公式可以确保每个人获取的金额的平均值是相等的,不 ...

  8. 微信的红包算法 了解一下两种就可以了

    1.微信红包算法 代码大致意思是这样的:假设有100元钱,分给十个人.那么第一个人获得红包大小怎么计算呢?100/10 = 10元.这是期望值.从0.01到20的区间中(其中20=10乘以2)随机抽取 ...

  9. 水果礼包拼手气(仿红包拼手气)含拼手气红包算法

    现阶段有个需求: 现有一个水果礼包,礼包包含多品类.多规格.多数量的拼手气小红包生成. 转化为简单json 如: 礼包内有 {A={a1=3, a2=1}, B={b1=1}, C={c1=5}} 有 ...

最新文章

  1. 循环机换变速箱油教程_水箱内全是油, 变速箱内全是水!看师傅怎么修...
  2. c语言里 如何取得线程的lpparameter'参数,请问线程函数如何访问对话框类中的变量...
  3. Git 常用命令整理(持续更新)
  4. [保存]C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
  5. css-元素居中方法总结
  6. 塑料模具计算机辅助设计,注塑模具3D计算机辅助设计系统
  7. 外包如何安排人手-b
  8. 信息安全工程师真题1
  9. 电动汽车充电解决方案领导品牌智充科技获壳牌资本投资;安百拓完成收购测井服务公司Kinetic | 能动...
  10. 诛仙服务器 修改技能伤害,《诛仙3》技能调整优化【 技能修改·天脉】
  11. 100以内的勾股数python_Python实现获取前100组勾股数的方法
  12. Docker hub配置国内加速器
  13. [管理新思维]社会化管理和开放式创新|裂变式创业
  14. php网页跳转支付宝app,php 做支付宝电脑网站和app支付
  15. 探秘varian:优雅的发布部署程序
  16. 用百度地图开通微信支付分
  17. pyqtgraph逐点画波形图例子
  18. 用户的裂变式增长,神秘的病毒系数K是什么样的?
  19. 出现Cannot resolve plugin XXX的解决办法
  20. Web-html、css、JavaScript_02

热门文章

  1. 公司宣传软文怎么写?3个技巧,让你的公司介绍更有逼格
  2. 2020年云南专升本各院校招生人数及学费情况
  3. html表格及传统布局
  4. 万国觉醒迁服务器显示该王国还未开放,万国觉醒无法迁城怎么办 王国迁城条件及详细步骤...
  5. 关于blob加密视频的基于m3u8和ts文件下载转MP4视频的python爬虫实现
  6. 大二下学期C++课程设计之cocos2d-x合金弹头
  7. 怎么查看三星电视服务器是否维护,三星液晶电视怎么保养 三星液晶电视维修保养方法【详解】...
  8. Android APNS
  9. mysql配置1045错误_MySql 1045错误
  10. 持续学习第118天(扶摇生财思维)