JAVA概率实现--一篇最常见、最通用解决方案
日常场景:某活动抽奖,控制各等奖的出现概率
比如控制A(中奖率):20%;B(获得优惠券率):30%;C(谢谢参与率):50%
下面以封装好在main()函数里,上代码(记得导入相应的包):
public class Probability {
public static void main(String[] args) {/**
* 先来一个简单通用的解决方案
* 需求:生成A(一等奖):20%;B(二等奖):30%;C(不中奖):50%
*/
double num;
Map<String ,Integer> confirmMap = new HashMap<>();
int countA = 0;
int countB = 0;
int countC = 0;
for(int i = 0; i < 10000; i++){
num = Math.random() * 100;
if(num < 20){
countA++;
}else if(num >= 20 && num < 50){
countB++;
}else{
countC++;
}
}
confirmMap.put("A", countA);
confirmMap.put("B", countB);
confirmMap.put("C", countC);
int total = 0;
for(Map.Entry<String, Integer> cmap : confirmMap.entrySet()){
total += cmap.getValue();
}
System.out.println("总计:"+total);
NumberFormat nfmt = NumberFormat.getInstance();// 创建一个数值格式化对象
nfmt.setMinimumIntegerDigits(2);// 设置精确到小数点后2位
for(Map.Entry<String, Integer> omap : confirmMap.entrySet()){
System.out.print(omap.getKey()+":"+omap.getValue());
System.out.println("。。。占比为" + nfmt.format((double)omap.getValue()/total * 100) +"%");
}
}
}
结果为:

========《无律》==========
JAVA概率实现--一篇最常见、最通用解决方案的更多相关文章
- 一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要
一点一点看JDK源码(六)java.util.LinkedList前篇之链表概要 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.什么 ...
- Java并发 - (无锁)篇6
, 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 本文主要介绍了死锁的概念与一些相关的基础类, 摘录自葛一鸣与郭超的 [Java高并发程序设计]. 无锁是一种乐观的策略, 它假设对资源的访问是没 ...
- Java学习之jackson篇
Java学习之jackson篇 0x00 前言 本篇内容比较简单,简单记录. 0x01 Json 概述 概述:JSON(JavaScript Object Notation, JS 对象简谱) 是一种 ...
- Java多线程系列--“基础篇”11之 生产消费者问题
概要 本章,会对“生产/消费者问题”进行讨论.涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现 转载请注明出处:http://www.cnblogs.com/skywang12345/p ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...
- Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式
概要 本章,我们学习“常用的实现多线程的2种方式”:Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多线程.关于线程 ...
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start( ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- Java多线程系列--“基础篇”06之 线程让步
概要 本章,会对Thread中的线程让步方法yield()进行介绍.涉及到的内容包括:1. yield()介绍2. yield()示例3. yield() 与 wait()的比较 转载请注明出处:ht ...
随机推荐
- shell bash-shell
bash shell中的命令替换,`cmd`或者$(cmd). bash shell中的变量赋值,直接name = var: (bash中的变量赋值不能中间有空格) 变量引用时,$name,如果na ...
- ASP.NET Core SignalR
ASP.NET Core SignalR 是微软开发的一套基于ASP.NET Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客户端. 功能 自动管理连接 允许同时广播 ...
- SpringMVC 允许跨域访问 也可以选择限制指定IP 允许访问 对象的数据传输
java ajax
- mock基本使用
**一.mock解决的问题** 开发时,后端还没完成数据输出,前端只好写静态模拟数据.数据太长了,将数据写在js文件里,完成后挨个改url.某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼.想要尽可 ...
- Linux 系统级开启文件句柄 调优
系统级开启文件句柄 max-file系统级别的能够打开的文件句柄的数量,Centos7默认是794168. Max-file 与 ulimit -n 的区别 max-file 表示系统级别的能够打开 ...
- BBU和RRU具体区别是 什么?
RRU是Remote Radio Unit 远端射频模块,BBU是Building Baseband Unit 室内基带处理单元.基带BBU集中放置在机房,RRU可安装至楼层,BBU与RRU之间采用光 ...
- 微信小程序实现部分双向数据绑定(为input、picker、textarea编写统一的更新数据逻辑)
wepy开发小程序 以input为例,微信小程序没有数据双向绑定,input要显示绑定的数据即value等于一个绑定的量 <input type="text" value=& ...
- linux解压类型总结
1.*.tar 用 tar –xvf 解压2.*.gz 用 gzip -d或者gunzip 解压3.*.tar.gz和*.tgz 用 tar –xzf 解压4.*.bz2 用 bzip2 -d或者用b ...
- VR外包团队—国内首家VR虚拟现实主题公园即将在北京推出
期,美国“The VOID”.澳洲“Zero Latency”两大虚拟现实主题乐园让许多爱好者兴奋至极,门票据说都已经预约到明年2月!在如此巨大的商机面前,谁将抢到国内VR虚拟现实主题公园第一块蛋糕? ...
- 移动Web UI库(H5框架)
1.Framework7 Framework7 - is a free and open source mobile HTML framework to develop hybrid mobile a ...