Java基础知识强化80:Math类random()方法的小扩展(控制产生目的数字的概率)
1. Math.random()方法:
Math.random()出现的数据是0.0<= x < 1.0之间,随机出现一个数据Math.random()>0.1概率是0.9
那么如下:
Math.random()>0.1? 2:4
上面表示出现数字2的概率为0.9,出现数字4的概率为0.1
2. 上面出现的是两个数,如果我们案例需求是多个数,控制概率出现,该怎么办呢?
下面是一个案例:
做一个翻宝程序,通过返回数字0-5来判断中奖情况,
012345,这几个数字的出现的概率是0出现最高,1出现比0少,2出现比1少,依次下去……
实现代码:
package com.himi.math; /**
* JAVA 返回随机数,并根据概率、比率
*
* @author hebao
*
*/
public class MathRandom {
/**
* 出现的概率为%50
*/
public static double rate0 = 0.50;
/**
* 出现的概率为%20
*/
public static double rate1 = 0.20;
/**
* 出现的概率为%15
*/
public static double rate2 = 0.15;
/**
* 出现的概率为%10
*/
public static double rate3 = 0.10;
/**
* 出现的概率为%4
*/
public static double rate4 = 0.04;
/**
* 出现的概率为%1
*/
public static double rate5 = 0.01; /**
* Math.random()产生一个double型的随机数.
* 判断一: 例如0出现的概率为%50,则介于0到0.50中间的返回0
*
* @return int
*
*/
private int PercentageRandom() {
double randomNumber;
randomNumber = Math.random();// randomNumber = [0,1)
if (randomNumber >= 0 && randomNumber <= rate0) {
return 0; } else if (randomNumber >= rate0 / 100 && randomNumber <= rate0 + rate1) {
return 1; } else if (randomNumber >= rate0 + rate1 && randomNumber <= rate0 + rate1 + rate2) {
return 2; } else if (randomNumber >= rate0 + rate1 + rate2 && randomNumber <= rate0 + rate1 + rate2 + rate3) {
return 3; } else if (randomNumber >= rate0 + rate1 + rate2 + rate3
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4) {
return 4; } else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4
&& randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4 + rate5) {
return 5; }
return -1;
} /**
* 测试主程序:
* 打印出个随机数据,验证出现概率
*
* @param agrs
*/
public static void main(String[] agrs) {
int i = 0;
double count_0 = 0;
double count_1 = 0;
double count_2 = 0;
double count_3 = 0;
double count_4 = 0;
double count_5 = 0; double tatal = 0; MathRandom a = new MathRandom();
StringBuffer sb = new StringBuffer();
for (i = 0; i <= 100000; i++)
{
sb.append(a.PercentageRandom());
} char[] chars = sb.toString().toCharArray();
for(i=0; i<chars.length; i++) {
if(chars[i] == '0') {
count_0++;
} else if(chars[i] == '1') {
count_1++;
} else if(chars[i] == '2') {
count_2++;
} else if(chars[i] == '3') {
count_3++;
} else if(chars[i] == '4') {
count_4++;
} else if(chars[i] == '5') {
count_5++;
}
} tatal = count_0+count_1+count_2+count_3+count_4+count_5; System.out.println("统计如下:");
System.out.println("的个数为:"+count_0+"---概率为"+count_0/tatal);
System.out.println("的个数为:"+count_1+"---概率为"+count_1/tatal);
System.out.println("的个数为:"+count_2+"---概率为"+count_2/tatal);
System.out.println("的个数为:"+count_3+"---概率为"+count_3/tatal);
System.out.println("的个数为:"+count_4+"---概率为"+count_4/tatal);
System.out.println("的个数为:"+count_5+"---概率为"+count_5/tatal); }
}
运行程序如下:

Java基础知识强化80:Math类random()方法的小扩展(控制产生目的数字的概率)的更多相关文章
- Java基础知识强化74:正则表达式之分割功能 (扩展练习)
1. 看程序写结果:(面试题考过) package cn.itcast_03; /* * 分割功能练习 */ public class RegexDemo2 { public static void ...
- Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介
1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...
- Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)
1. 需求:设计一个方法,可以实现获取任意范围内的随机数 分析:使用方法random()如下: public static double random() 注:Returns a pseudo-ran ...
- Java基础知识强化79:被遗忘的Java Math类
1. Math类概述 Math类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. 2. 成员变量 和 成员方法(常用的) (1)成员变量 public static final d ...
- Java基础知识强化26:Object类之hashCode()方法、getClass()方法
1. Object类的hashCode()方法,如下: public int hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...
- Java基础知识强化26(1):Object类之Object类的概述
1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类 2.Object类无参构造 ...
- Java基础知识强化99:Java 常见异常及趣味解释
常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.langjava.lang软件包是java语言的核心部分,它提供了java中的基础类. java.lan ...
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- Java基础知识强化107:DecimalFormat
1. 引入: 如何控制输出数据的精度? >1. 使用Math.round方法 (1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ? 答:比如,如下 ...
随机推荐
- ASP.NET菜鸟之路之实现新闻列表增删改
背景 我是一个ASP.NET菜鸟,暂时开始学习ASP.NET,在此记录下我个人敲的代码,没有多少参考价值,请看到的盆友们为我点个赞支持我一下,多谢了. 网站介绍 根据视频的例子修改的方法,其中数据不经 ...
- ubuntu下apache与php配置
实验环境 uname -a Linux tomato 4.4.0-34-generic #53-Ubuntu SMP Wed Jul 27 16:06:39 UTC 2016 x86_64 x86_6 ...
- 加入BOINC(伯克利开放式网络计算平台)
转载:BOINC:为科学而计算 通过 BOINC 你可以将闲置的计算机时间贡献给 SETI@home, Climateprediction.net, Rosetta@home, World Commu ...
- IOS 在Xcode 4.x以上添加静态库
参考网站:http://my.oschina.net/edwardlau/blog/95924 常用的代码可以通过静态库进行抽出来作为公共类方法,方便在其他地方调用,一般来说我们要准备2套静态库,一套 ...
- 二分查找里的upper bound与lower bound的实现与分析
1. 问题引入 最近参选了学堂在线的课程数据结构(2015秋).课程由清华大学的邓俊辉老师主讲,在完成课后作业时,遇到了这样一个题目范围查询.在这个题目中,我需要解决这样一个子问题:给定了一组已经排好 ...
- 搬瓦工搭建VPN
搬瓦工VPS的PPTP VPN搭建其实和上面都是很简单的,这个要用到上面的搬瓦工VPS控制面板. Root shell - advanced 下载 centos 6 一键安装包 wget --no-c ...
- COJ 0578 4019二分图判定
4019二分图判定 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给定一个具有n个顶点(顶点编号为0,1,… ...
- "红色病毒"问题 HDU 2065 递推+找循环节
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...
- collapse
1. border-collapse 该CSS属性用来设定表格的行和列的边框是合并成单边框,还是分别有各自的边框 separate 缺省值.边框分开,不合并. collapse 边框合并.即如果相邻, ...
- 甲骨文公司 Oracle
甲骨文公司 甲骨文公司,全称甲骨文股份有限公司,是全球最大的企业软件公司,总部位于美国加利福尼亚州的红木滩.甲骨文是继Microsoft之后,全球收入第二多的软件公司.甲骨文公司1989年正式进入中国 ...