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. SqlServer CTE 递归查询 Oracle递归查询

    在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的 ...

  2. 重新开始学习javase_IO

    一,认识IO 通过数据流.序列化和文件系统提供系统输入和输出. 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接.类似的,当程序需要 ...

  3. 你好,C++(5)如何输出数据到屏幕、从屏幕输入数据与读写文件?

    2.2  基本输入/输出流 听过HelloWorld.exe的自我介绍之后,大家已经知道了一个C++程序的任务就是描述数据和处理数据.这两大任务的对象都是数据,可现在的问题是,数据不可能无中生有地产生 ...

  4. 各种driver的继承关系

    AndroidDriver extends AppiumDriver extends DefaultGenericMobileDriver extends RemoteWebDriver

  5. jquey复选框三级分类关联一二级分类

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Category_Manag ...

  6. id 自增------删除数据后恢复到删除前自增id

    删除数据后,执行下面语句: ALTER TBALE TableName AUTO_INCREMENT=1 mysql删除比较 一.DROP drop  table tablename 绝招:删除内容和 ...

  7. jquery 与其他库冲突解决方案

    var j = jQuery.noConflict(); j("div p").hide(); // 基于 jQuery 的代码 $("content").st ...

  8. linux内核学习之二:编译内核

    在linux内核学习系列的第一课中讲述了搭建学习环境的过程(http://www.cnblogs.com/xiongyuanxiong/p/3523306.html),环境搭好后,马上就进入到下一环节 ...

  9. bestcoder单调区间

    http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=584&pid=1006 题解:ORZ Matrix67 ht ...

  10. Android 子线程中进行UI操作遇到的小问题

    今天在学习<第一行Android代码>第9章-子线程进行UI操作时遇到了一些问题. 代码是这样的: ... import java.util.logging.Handler; ... pu ...