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. ...
随机推荐
- 推荐一款好用到爆的开源 Java 诊断工具
Arthas是什么鬼?Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux.M ...
- Note | 用Hugo搭建博客并部署到GitHub Pages
目录 1. 本地搭建 1.1 安装Hugo 1.2 创建站点 1.3 新建页面和文章 1.4 使用主题 1.5 修改配置文件 1.6 预览 2. 部署 之前担心过现有博客平台(如博客园,CSDN)突然 ...
- python--基础知识点梳理(三)深浅拷贝、进线协程、os和sys、垃圾回收机制、读文件的三种方式
深拷贝与浅拷贝 import copy 浅拷贝:将一个对象的引用拷贝到另一个对象上,所以如果我们在拷贝中改动,会影响到原对象.copy.copy() 深拷贝:将一个对象拷贝到另一个对象中,新开辟了一个 ...
- Python连载42-异步协程函数
一. asyncio 1.python3.4开始引入标准库之中,内置对异步io的支持 2.asyncio本身是一个消息循环 3.步骤: (1)创建消息循环 (2)把协程导入 (3)关闭 4.举例: ...
- Serlvet、JSP和JSTL的联系
没有无缘无故的爱和恨,没有无缘无故的编程 前言: 想这世间,没有无缘无故的爱,也没有无缘无故的恨,一切都有有原因的,我想编程亦是如此,技术时常更新,程序员时常学习,随着时间的推移,程序员发际线的增高, ...
- C#委托内部使用局部的变量的问题
一. 引子 先来看如下代码: ; Action action1 = () => { Console.WriteLine("打印一下i的值:" + i); }; i = ; A ...
- Linux软件安装——服务管理
Linux软件安装——服务管理 摘要:本文主要学习了Linux中有关服务管理的知识. 什么是服务 服务一般是放置在后台运行的一个或多个进分程,为用户或系统提供某项特定的服务,有些是系统服务,有些则是独 ...
- /etc/profile和~/.bash_profile等文件的区别和联系
对比说明:/etc/profile:为系统的每个用户设置环境信息和启动程序,当用户第一次登录时,该文件被执行,其配置对所有登录的用户都有效.当被修改时,必须重启才会生效.英文描述:”System wi ...
- SparkStreaming wordCountDemo基础案例
体现sparkStreaming的秒级准实时性,所以我们需要一个能够持续输入数据的东东 1.CentOS上下载nc 创建一个scala工程,导入相关pom依赖 <?xml version=&qu ...
- MySQL 主从复制开启 GTID
GTID (Golobal Transaction ID) 是对于一个已提交事务的唯一编号,并且是一个全局(主从复制)唯一的编号. GTID 复制和传统复制的区别:在启动主从复制时,不需要指定 bin ...