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位,或者其它指定位数 ? 答:比如,如下 ...
随机推荐
- 微信小应用vs progressive-web-apps
https://developers.google.com/web/progressive-web-apps/
- vim插件和配置
vim插件和配置 插件 pathogen 可以方便地管理vim插件 在没有pathogen的情况下,vim插件的文件全部都放在.vim目录,卸载插件很麻烦,pathogen可以将不同的插件放在一个单独 ...
- C# 根据IP查询地址归属地
必备文件:IPLocation.dll.QQWry.Dat 下载地址:http://pan.baidu.com/s/1jG1dlOy (可百度下载) 之前有过将 QQWry.Dat 转为 Access ...
- CSS hack技巧
CSS hack技巧一览,原文来自CSDN freshlover的博客专栏<史上最全CSS Hack方式一览> 什么是CSS hack 由于不同厂商的流览器或某浏览器的不同版本(如IE6- ...
- Python自动化运维之17、Python操作 Memcache、Redis、RabbitMQ
一.Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的 ...
- 【新手--android日记】实现IOS风格电话界面
[前言--新手日记] 开始学习android开发,通过做一个通讯录练习,打算实现各种自己想实现的功能. 新手作品,技术含量很浅.主要是记录自己的学习过程. 纯学习之用,求评论,求建议,求教导. [正题 ...
- winform拖动无边框窗体
这个无边框拖动船体,代码很少,却总是记不住,于是就在网上搜了这段代码,记录一下,省的再忘 using System; using System.Collections.Generic; using S ...
- Windows提供了两种将DLL映像到进程地址空间的方法(隐式和显式)
调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同.Windows提供了两种将DLL映像到进程地址空间的方法: 1. 隐式的加载 ...
- Miller_Rabin素数判断,rho
safe保险一点5吧.我是MR: ; int gcd(int a,int b){return !b?a:gcd(b,a%b);} int mul(int a,int b,int p){ )*p); ? ...
- AOP Concepts
As with most technologies, AOP comes with its own specific set of concepts and terms. It is importan ...