使用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 发红包的更多相关文章

  1. JAVA发红包案例

    模拟拼手气红包* 对于指定总金额以及红包个数,可以生成不同金额的红包,*,每个红包金额随机生成. * 分析这个题目:* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.* 按照这 ...

  2. java 发红包案例

  3. Java使用ArrayList实现“群主发红包”功能

    群主发普通红包,某群有多名成员,群主给成员发普通红包,普通红包的规则: 群主的一笔金额,从群主余额中扣除,平均分成n等份,让成员领取: 成员领取红包后,保存到成员余额中. 请根据描述,完成案例中所有类 ...

  4. PHP实现发红包程序

    我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...

  5. PHP实现发红包程序(helloweba网站经典小案例)

    我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...

  6. 使用PHP编写发红包程序

    使用PHP编写发红包程序 http://www.jb51.net/article/69815.htm 投稿:hebedich 字体:[增加 减小] 类型:转载 时间:2015-07-22   微信发红 ...

  7. js 发红包

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  8. Java发邮件:Java Mail与Apache Mail

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例 ...

  9. 发红包android

    立即春节,写个应景的控件         思路分析 1.红包沿着不同的轨迹由上往下运动 2.当手指捕获到一个红包,红包停止原先的运动,能够随着手指的滑动做跟手操作 3.当手指动作停止后,红包放大 4. ...

随机推荐

  1. css 两行、多行超出后用省略号...表示

    .item-name { letter-spacing: ; overflow: hidden; display: -webkit-box; text-overflow: ellipsis; -web ...

  2. python爬虫之爬取网站到数据库

    一.根据已有程序运行得到的结果 完整代码如下: import sqlite3; class DB(object): """数据库访问方法的实现""&q ...

  3. 创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    1.创建组件的方法   函数组件   class组件 1.1 函数组 无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `functi ...

  4. python多项式求解

    例如:p(x) = x3 - 3x+5 可以使用向量P=[1,0,-3,5]表示,向量长度减一表示多项式最高项次数. 从右到左分别是变量x的0次幂.1次幂.2次幂……n次幂. 这里可以使用numpy的 ...

  5. three.js实现世界3d地图

    概况如下: 1.THREE.Shape绘制世界地图平面地图: 2.THREE.ExtrudeGeometry将绘制的平面沿着Z轴拉伸,实现3d效果: 效果图如下: 预览地址:three.js实现世界3 ...

  6. Xshell的一些使用方法和注意事项

    xshell 本文就是想记录下最近遇到的一些问题,以及一些 xshell 能帮助我们提升效率的方面. xshell 编码问题 我们连接服务器,是通过本地登录到 跳板机,然后通过跳板机登录到 我们的服务 ...

  7. oracle学习笔记(十七) PL/SQL高级应用

    PL/SQL高级应用 动态SQL 在PL/SQL中,不能直接执行DDL(create,alter,drop),得使用动态SQL,当然,除了DDL,动态SQL也可以执行DML(select,insert ...

  8. ABAP ALV显示前排序合并及布局显示

    有时候会有用户要求显示出来的ALV立即就是升序或者降序,或者是上下同一个字段值一样的情况显示一次,如 变为 这个时候内表用SORT有时候会不好用,可以使用函数 REUSE_ALV_GRID_DISPL ...

  9. java基础(12):构造方法、this、super

    1. 构造方法 我们对封装已经有了基本的了解,接下来我们来看一个新的问题,依然以Person为例,由于Person中的属性都被private了,外界无法直接访问属性,必须对外提供相应的set和get方 ...

  10. 0基础入门学习Python(第1-2章)

    第一章:就这么愉快的开始吧 1.1获取Python Python3.7 1.2从idle启动 Python 3.7.3 (default, Mar 27 2019, 09:23:39)[Clang 1 ...