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()方法的小扩展(控制产生目的数字的概率)的更多相关文章

  1. Java基础知识强化74:正则表达式之分割功能 (扩展练习)

    1. 看程序写结果:(面试题考过) package cn.itcast_03; /* * 分割功能练习 */ public class RegexDemo2 { public static void ...

  2. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  3. Java基础知识强化81:Math类random()方法之获取任意范围的随机数案例(面试题)

    1. 需求:设计一个方法,可以实现获取任意范围内的随机数 分析:使用方法random()如下: public static double random() 注:Returns a pseudo-ran ...

  4. Java基础知识强化79:被遗忘的Java Math类

    1. Math类概述 Math类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. 2. 成员变量 和 成员方法(常用的) (1)成员变量 public static final d ...

  5. Java基础知识强化26:Object类之hashCode()方法、getClass()方法

    1. Object类的hashCode()方法,如下: public  int  hashCode():返回该对象的哈希码值,这个值和地址值有关,但是不是实际地址值(哈希码值是根据实际地址值转化过来的 ...

  6. Java基础知识强化26(1):Object类之Object类的概述

    1.Object类 类Object是类层次结构的根类,每个类都使用 Object作为超类.所有对象(包括数组)都实现这个类的方法 每个类直接或者间接继承自Object类   2.Object类无参构造 ...

  7. Java基础知识强化99:Java 常见异常及趣味解释

    常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.langjava.lang软件包是java语言的核心部分,它提供了java中的基础类. java.lan ...

  8. Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

    1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

  9. Java基础知识强化107:DecimalFormat

    1. 引入: 如何控制输出数据的精度? >1. 使用Math.round方法 (1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ? 答:比如,如下 ...

随机推荐

  1. [逼死强迫症 - C&C++设计风格选择.1] : 命名规范

    1.命名规范 本系列的第一篇,命名风格本就是有关艺术审美,没有美与丑的绝对标准,本文难免带有主观选择倾向,但是会尽量保持客观的态度归纳几种主流的命名风格,仅供参考.制定规范是为了方便团队沟通和利于代码 ...

  2. UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)

    本文出自   http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...

  3. 移动端html5重力感应

    下面是测试案例,只测试过itouch,iphone http://06wjin.sinaapp.com/billd/     http://06wjin.sinaapp.com/billd/test. ...

  4. [前端笔记]第一篇:html

    什么是 HTML? HTML 是用来描述网页的一种语言.HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言,而是一种标记语言 (mark ...

  5. python 列表 字典 读写文件:pickle模块的基本使用

    python数据持久存储:pickle模块的基本使用(转载) 作者: pzxbc 出处: http://pzxbc.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保 ...

  6. 【转】Windows平台下Git服务器搭建

    Windows平台下Git服务器搭建 Posted on 2015-05-18 21:29 阿祥当码农 阅读(7637) 评论(0) 编辑 收藏 该文章转自:http://www.codeceo.co ...

  7. 使用cglib动态创建java类

    转至:http://ckwang17.iteye.com/blog/963881 cglib 是一个开源项目! 是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Jav ...

  8. 不用预计算切向空间的Normal mapping

    先贴出shader 吧 等有时间了 来阐述原理 // vertex shader //varying vec3 ViewPosition; //varying vec3 Normal; varying ...

  9. C51指针小结

    一. 指针变量的定义 指针变量定义与一般变量的定义类似,其形式如下: 数据类型 [存储器类型1] * [存储器类型2] 标识符: [存储器类型1] 表示被定义为基于存储器的指针.无此选项时,被定义为一 ...

  10. Zend framework重定向的方法

    zend framework重定向的方法有三种.render, forward, redirect.它们各自的用法是什么样子的呢?有什么区别呢? 一.render render是用来调视图用的,不会调 ...