使用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. 去除mysql里面重复的行并留下id最小的

    DELETE FROM wynews WHERE title IN (SELECT * FROM (SELECT title FROM wynews GROUP BY title HAVING COU ...

  2. 趣谈Linux操作系统学习笔记:第二十一讲

    一.分段机制 1.分段机制的原理图 2.段选择子 3.段偏移量 例如,我们将上面的虚拟空间分成以下 4 个段,用 0-3 来编号.每个段在段表中有一个项,在物理空间中,段的排列如下图的右边所示. 4. ...

  3. angularjs 一篇文章看懂自定义指令directive

     壹 ❀ 引 在angularjs开发中,指令的使用是无处无在的,我们习惯使用指令来拓展HTML:那么如何理解指令呢,你可以把它理解成在DOM元素上运行的函数,它可以帮助我们拓展DOM元素的功能.比如 ...

  4. kafka 重放 重播 从某个时间点或者offset开始消费

    转自: https://www.jianshu.com/p/932663e9a226 consumer.subscribe(topicA); consumer.poll(100);//正常订阅topi ...

  5. Java报错:java.math.BigDecimal cannot be cast to java.lang.String

    从数据库取数字,转为string,报错: java.math.BigDecimal cannot be cast to java.lang.String 错误代码 Integer.parseInt(( ...

  6. Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

    本文梯子 本文3.0版本文章 更新 代码已上传Github+Gitee,文末有地址 零.今天完成的绿色部分 一.依赖注入的理解和思考 二.常见的IoC框架有哪些 1.Autofac+原生 2.三种注入 ...

  7. MySQL入门——在Linux下安装和卸载MySQL

    MySQL入门——在Linux下安装和卸载MySQL 摘要:本文主要学习了如何在Linux系统中安装和卸载MySQL数据库. 查看有没有安装过MySQL 使用命令查看有没有安装过: [root@loc ...

  8. CDN(Content Delivery Network)原理

    CDN即内容分发网络,一般包括分发服务系统,负载均衡系统和管理系统. 分发服务系统,其基本的工作单元就是各个cache服务器.负责直接响应用户请求,将内容快速分发到用户:同时还负责内容更新,保证和源站 ...

  9. vuepress1.x入门使用

    要点: 1.用npm操作会有各种问题,用yarn取代之; 2.yarn可以用npm全局安装,而npm是node环境自带,node环境去官网下载安装; 3.没有必要全局安装vuepress 操作: 1. ...

  10. python_正则表达式学习

    re.match()函数: 函数语法: re.mathch ( pattern , string , flags = 0) 参数说明: pattem 匹配的正则表达式 string 要匹配的字符串 f ...