V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  memedahui  ›  全部回复第 12 页 / 共 15 页
回复总数  288
1 ... 4  5  6  7  8  9  10  11  12  13 ... 15  
2019-10-09 10:10:55 +08:00
回复了 litp 创建的主题 问与答 V2 的夜间模式换了 icon 啦!
大清逊位诏书.jpg
2019-09-28 10:40:52 +08:00
回复了 zhuzhibin 创建的主题 问与答 [!] 讨论: 随机红包算法问题
import java.util.LinkedList;
import java.util.List;

/**
* Function: 模拟微信红包生成,以分为单位
*
* @author crossoverJie
* Date: 03/01/2018 16:52
* @since JDK 1.8
*/
public class RedPacket {

/**
* 生成红包最小值 1 分
*/
private static final int MIN_MONEY = 1;

/**
* 生成红包最大值 200 人民币
*/
private static final int MAX_MONEY = 200 * 100;

/**
* 小于最小值
*/
private static final int LESS = -1;
/**
* 大于最大值
*/
private static final int MORE = -2;

/**
* 正常值
*/
private static final int OK = 1;

/**
* 最大的红包是平均值的 TIMES 倍,防止某一次分配红包较大
*/
private static final double TIMES = 2.1F;

private int recursiveCount = 0;

public List<Integer> splitRedPacket(int money, int count) {
List<Integer> moneys = new LinkedList<>();

//金额检查,如果最大红包 * 个数 < 总金额;则需要调大最小红包 MAX_MONEY
if (MAX_MONEY * count <= money) {
System.err.println("请调大最小红包金额 MAX_MONEY=[" + MAX_MONEY + "]");
return moneys ;
}


//计算出最大红包
int max = (int) ((money / count) * TIMES);
max = max > MAX_MONEY ? MAX_MONEY : max;

for (int i = 0; i < count; i++) {
//随机获取红包
int redPacket = randomRedPacket(money, MIN_MONEY, max, count - i);
moneys.add(redPacket);
//总金额每次减少
money -= redPacket;
}

return moneys;
}

private int randomRedPacket(int totalMoney, int minMoney, int maxMoney, int count) {
//只有一个红包直接返回
if (count == 1) {
return totalMoney;
}

if (minMoney == maxMoney) {
return minMoney;
}

//如果最大金额大于了剩余金额 则用剩余金额 因为这个 money 每分配一次都会减小
maxMoney = maxMoney > totalMoney ? totalMoney : maxMoney;

//在 minMoney 到 maxMoney 生成一个随机红包
int redPacket = (int) (Math.random() * (maxMoney - minMoney) + minMoney);

int lastMoney = totalMoney - redPacket;

int status = checkMoney(lastMoney, count - 1);

//正常金额
if (OK == status) {
return redPacket;
}

//如果生成的金额不合法 则递归重新生成
if (LESS == status) {
recursiveCount++;
System.out.println("recursiveCount==" + recursiveCount);
return randomRedPacket(totalMoney, minMoney, redPacket, count);
}

if (MORE == status) {
recursiveCount++;
System.out.println("recursiveCount===" + recursiveCount);
return randomRedPacket(totalMoney, redPacket, maxMoney, count);
}

return redPacket;
}

/**
* 校验剩余的金额的平均值是否在 最小值和最大值这个范围内
*
* @param lastMoney
* @param count
* @return
*/
private int checkMoney(int lastMoney, int count) {
double avg = lastMoney / count;
if (avg < MIN_MONEY) {
return LESS;
}

if (avg > MAX_MONEY) {
return MORE;
}

return OK;
}


public static void main(String[] args) {
RedPacket redPacket = new RedPacket();
List<Integer> redPackets = redPacket.splitRedPacket(20000, 100);
System.out.println(redPackets);

int sum = 0;
for (Integer red : redPackets) {
sum += red;
}
System.out.println(sum);
}

}






注 引用至:github.com/crossoverJie
2019-09-28 08:52:56 +08:00
回复了 Antidictator 创建的主题 程序员 我有一个朋友,被电信诈骗了 5W
移动:???请谨防电信支付诈骗
2019-09-27 17:43:36 +08:00
回复了 JsonTu 创建的主题 程序员 [ Java 并发] 老哥们,求救啊
volatile 关键字 只能保证线程可见性,就是指多个线程获取的值是一致的,但是不能保证操作的原子性.
可选方案:
1.AtomicInteger(线程安全类)
2.synchronized wait(锁)
3.ReentrantLock(锁)
4.LockSupport
2019-09-27 16:50:41 +08:00
回复了 yuthelloworld 创建的主题 iPhone [购买建议] 手持 iphone6s,是买 8P 还是买 xr 、11?
我今天刚买了一个 6s
2019-09-27 16:11:22 +08:00
回复了 cskeleton 创建的主题 分享发现 终于找到经常网址复制不全的原因了
怎么你的屏幕 fps 这么高,一点不卡,是什么屏幕呀
我都是手动适配,就是和设计经常撕...
2019-09-26 16:50:51 +08:00
回复了 v2hh 创建的主题 MySQL 迫于没做过支付相关业务,求助 mysql 表设计
数据强一致就行了
2019-09-23 16:16:05 +08:00
回复了 iszengmh 创建的主题 问与答 你们离职原因都是怎么说的
给钱少了(X)
适应不了当前优秀环境(√)
2019-09-23 08:52:53 +08:00
回复了 JCZ2MkKb5S8ZX9pq 创建的主题 上海 大家来上海玩,有什么让你印象深刻的嘛?
人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人人
手机三国杀,一点不用氪
2019-09-21 16:27:33 +08:00
回复了 uio 创建的主题 优惠信息 吃蟹季的选择 京东上的大额优惠
被骗了,总价是 258
2019-09-21 15:44:34 +08:00
回复了 binbinyouliiii 创建的主题 分享发现 我才发现,某 hub 网站支持简体中文
我佛了,这没有卵用,我还是用 China,Chinese 等关键字...(逃
2019-09-20 14:37:37 +08:00
回复了 Marstin 创建的主题 分享发现 NodeJS&&Electron 真的太好用了,推荐~!
@Counter JAVA GUI (逃
我都想买一个了,但是好像全是翻新机
2019-09-20 10:08:03 +08:00
回复了 Marstin 创建的主题 分享发现 NodeJS&&Electron 真的太好用了,推荐~!
大清亡了.jpg
2019-09-19 11:07:13 +08:00
回复了 redam 创建的主题 问与答 前端想学下 Java 后端,有什么书推荐吗
要看你手头上做的什么,前端的话搞搞 nodejs 也是不错的
2019-09-18 16:08:40 +08:00
回复了 66beta 创建的主题 Java 刚开始学 Java ,如何进入实战?
"毫无 PHP 和 js 那种 mvc 的感觉",我呆住了.
2019-09-18 16:04:53 +08:00
回复了 ppyzzz 创建的主题 问与答 写代码写着写着就会刷新 V 站看个贴的 V 友进来冒个泡。
我的划水指数已经 MAX 了
1 ... 4  5  6  7  8  9  10  11  12  13 ... 15  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 07:59 · PVG 15:59 · LAX 00:59 · JFK 03:59
Developed with CodeLauncher
♥ Do have faith in what you're doing.