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位,或者其它指定位数 ? 答:比如,如下 ...
随机推荐
- Java学习----变量是什么
1.变量必须拥有的类型 2.变量必须拥有的名字 变量:具备名字和类型的可以存放类型匹配的数据的量 public class Student { public static void main(Stri ...
- javascript禁止输入数字
function onkeypressIsNumber(){ var mainForm = document.mainForm;//mainForm是form表单的ID for(var i=0; i& ...
- Unable to boot device in current state: Creating
安装完xcode6.1后,将其改名为Xcode6.1.app,再移动个位置,启动模拟器,问题来了: Unable to boot device in current state: Creating 解 ...
- memcpy函数的使用方法
c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 1.函数原型 void *memcpy(void * ...
- .NET调用osql.exe执行sql脚本创建表和存储过程
using System;using System.Diagnostics;using System.Windows.Forms; namespace WindowsFormsApplication1 ...
- angular2 学习笔记 ( rxjs 流 )
RxJS 博大精深,看了好几篇文章都没有明白. 范围牵扯到了函数响应式开发去了... 我对函数式一知半解, 响应式更是第一次听到... 唉...不过日子还是得过...混着过先呗 我目前所理解的很浅, ...
- 来晚了--SALTSTACK要弄起
PUPPET就算了,我多少都有PYTHON基础,还是专SALTSTACK吧. 今天小玩玩,以后深入.
- 台积电16nm工艺为什么好过三星14nm
最近,关于iPhone6s A9处理器版本的事情的话题很热,最后都闹到苹果不得不出来解释的地步,先不评判苹果一再强调的整机综合续航差2~3%的准确性,但是三星14nm工艺相比台积电16nm工艺较差已经 ...
- (2015年郑州轻工业学院ACM校赛题) G 矩阵
看这道题的时候就感觉用一点动归思想+暴力 就能过了. #include<stdio.h> #include<iostream> #include<stack> #i ...
- (转载)PHP使用header函数设置HTTP头的示例方法表头
(转载)http://justcoding.iteye.com/blog/601117/ 代码: //定义编码 header( 'Content-Type:text/html;charset=utf- ...