Java 发红包
使用Java实现发红包的功能。
结构:
package redPocket
User.java
Manager.java
Member.java
Demo.java
思路:
Manager和Member类继承User,Manager类实现群主发红包的功能,Member类实现群员收红包的功能。Demo测试代码。
代码:
package redPocket;
public class User {
private String name;
private float money;
public User() {
}
public User(String name, float money) {
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;
}
@Override
public String toString() {
return "name:" + this.name + "; " + "money:" + this.money + "; ";
}
}
User.java
package redPocket; import java.util.ArrayList;
import java.util.Random; public class Manager extends User { public Manager() {
} public Manager(String name, float money) {
super(name, money);
} public ArrayList<Float> send(float totalMoney, int count, boolean isRandom) {
if (!hasEnoughMoney(totalMoney)) {
System.out.println("You do not have enough money!");
return null;
} ArrayList<Float> redPockets = new ArrayList<>();
this.setMoney(this.getMoney() - totalMoney); if (isRandom) {
Random random = new Random();
ArrayList<Float> percentage = new ArrayList<>();
// 将所有人抽到的0.0~1.0之间的比率存储到percentage中
for (int i = 0; i < count; i++) {
percentage.add(random.nextFloat());
}
// 计算percentage总和,再计算每个比率的占比
float totalPercentage = sum(percentage);
// 将这个占比乘以totalMoney算出每个人抽到了多少
for (int i = 0; i < count; i++) {
redPockets.add(percentage.get(i) / totalPercentage * totalMoney);
}
} else {
float average = totalMoney / count;
for (int i = 0; i < count; i++) {
redPockets.add(average);
}
} return redPockets;
} private boolean hasEnoughMoney(float totalMoney) {
if (this.getMoney() >= totalMoney) {
return true;
}
return false;
} public float sum(ArrayList<Float> percentage) {
float totalPercentage = 0.0F;
for (int i = 0; i < percentage.size(); i++) {
totalPercentage += percentage.get(i);
}
return totalPercentage;
}
}
Manager.java
package redPocket; import java.util.ArrayList;
import java.util.Random; public class Member extends User { public Member() {
} public Member(String name, float money) {
super(name, money);
} public void receive(ArrayList<Float> redPockets) {
// 在列表中随机抽取一位
int index = new Random().nextInt(redPockets.size());
float money = redPockets.get(index);
// 将被抽到的索引剔除
redPockets.remove(index);
System.out.println(this.getName() + "抽到了" + money);
this.setMoney(this.getMoney() + money);
}
}
Member.java
package redPocket;
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
Manager m = new Manager("Manager", 1000.0F);
Member m1 = new Member("Member1", 100.0F);
Member m2 = new Member("Member2", 45.56F);
ArrayList<Float> redPockets = m.send(888.88F, 8, true);
System.out.println(redPockets);
m1.receive(redPockets);
m2.receive(redPockets);
System.out.println(redPockets);
System.out.println(m);
System.out.println(m1);
System.out.println(m2);
}
}
Demo.java
Java 发红包的更多相关文章
- JAVA发红包案例
模拟拼手气红包* 对于指定总金额以及红包个数,可以生成不同金额的红包,*,每个红包金额随机生成. * 分析这个题目:* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.* 按照这 ...
- java 发红包案例
- Java使用ArrayList实现“群主发红包”功能
群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则: 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取: 成员领取红包后,保存到成员余额中. 请根据描述,完成案例中所有类 ...
- PHP实现发红包程序
我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...
- PHP实现发红包程序(helloweba网站经典小案例)
我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...
- 使用PHP编写发红包程序
使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22 微信发红 ...
- js 发红包
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- Java发邮件:Java Mail与Apache Mail
作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例 ...
- 发红包android
立即春节,写个应景的控件 思路分析 1.红包沿着不同的轨迹由上往下运动 2.当手指捕获到一个红包,红包停止原先的运动,能够随着手指的滑动做跟手操作 3.当手指动作停止后,红包放大 4. ...
随机推荐
- PHP递归函数return返回null的问题
前段时间在写递归函数的时候碰到个问题,返回值一直为null,这里记录一下. 写个小例子: /** * @param $i * @return mixed */ function recursion($ ...
- pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...
- MongoDB for OPS 04:备份恢复
写在前面的话 和 MySQL 一样,mongodb 也是需要将数据进行备份的,毕竟天有不测风云,谁也不知道哪天机器就炸了. 备份恢复 mongodb 提供了两种备份恢复手段:mongoexport / ...
- GO Map的初步使用
一.集合(Map) 1.1 什么是Map 张三:13910101201 李四:13801010134 map是Go中的内置类型,它将一个值与一个键关联起来.可以使用相应的键检索值. Map 是一种无序 ...
- `protected` vs `private`
private 标识为 private 的属性为私有属性,不能在除自己外的地方进行访问. protected 标识为 protected 的属性为受保护的属性,与私有属性类似,但还可以在继承类中进行访 ...
- python基础(13):函数名的使用、第一类对象、闭包、迭代器
1. 函数名的运用 函数名是⼀个变量,但它是⼀个特殊的变量,与括号配合可以执⾏函数的变量. 1.1 函数名的内存地址 def func(): print("呵呵") print(f ...
- Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战
Java生鲜电商平台-秒杀系统微服务架构设计与源码解析实战 Java生鲜电商平台- 什么是秒杀 通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定 ...
- Oracle 12C Win 10 安装 应用 总结
安装参考 https://www.cnblogs.com/onezg/p/8768597.html 我当时安装的是Oracle 12c Release 1(Version 12.1.0.1.0,64位 ...
- Model赋值返回json
DataTable resultList = bll.GetResultListByCondition(bureauCode, deptCode, fileTitle); IList<GanBu ...
- scala 语法速查
摘自官网 variables var x = 5 Good x = 6 Variable. val x = 5 Bad x = 6 Constant. var x: Double = 5 Expl ...