Java基础知识强化81: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少,依次下去……

实现代码:

 1 /**
 2  * JAVA 返回随机数,并根据概率、比率
 3  * @author zhanglei
 4  *
 5  */
 6 public class MathRandom
 7 {
 8  /**
 9      * 0 出现的概率为%50
10      */
11  public static double rate0 = 0.50;
12  /**
13      * 1 出现的概率为%20
14      */
15  public static double rate1 = 0.20;
16  /**
17      * 2 出现的概率为%15
18      */
19  public static double rate2 = 0.15;
20  /**
21      * 3 出现的概率为%10
22      */
23  public static double rate3 = 0.10;
24  /**
25      * 4 出现的概率为%4
26      */
27  public static double rate4 = 0.04;
28  /**
29      * 5 出现的概率为%1
30      */
31  public static double rate5 = 0.01;
32
33  /**
34   * Math.random()产生一个double型的随机数,判断一下
35   * 例如0出现的概率为%50,则介于0到0.50中间的返回0
36      * @return int
37      *
38      */
39  private int PercentageRandom()
40  {
41   double randomNumber;
42   randomNumber = Math.random();
43   if (randomNumber >= 0 && randomNumber <= rate0)
44   {
45    return 0;
46   }
47   else if (randomNumber >= rate0 / 100 && randomNumber <= rate0 + rate1)
48   {
49    return 1;
50   }
51   else if (randomNumber >= rate0 + rate1
52     && randomNumber <= rate0 + rate1 + rate2)
53   {
54    return 2;
55   }
56   else if (randomNumber >= rate0 + rate1 + rate2
57     && randomNumber <= rate0 + rate1 + rate2 + rate3)
58   {
59    return 3;
60   }
61   else if (randomNumber >= rate0 + rate1 + rate2 + rate3
62     && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4)
63   {
64    return 4;
65   }
66   else if (randomNumber >= rate0 + rate1 + rate2 + rate3 + rate4
67     && randomNumber <= rate0 + rate1 + rate2 + rate3 + rate4
68       + rate5)
69   {
70    return 5;
71   }
72   return -1;
73  }
74
75  /**
76   * 测试主程序
77      * @param agrs
78      */
79  public static void main(String[] agrs)
80  {
81   int i = 0;
82   MathRandom a = new MathRandom();
83   for (i = 0; i <= 100; i++)//打印100个测试概率的准确性
84   {
85    System.out.println(a.PercentageRandom());
86   }
87  }
88 }
时间: 2024-08-01 10:42:27

Java基础知识强化81:Math类random()方法的小扩展(控制产生目的数字的概率)的相关文章

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

1. 看程序写结果:(面试题考过) 1 package cn.itcast_03; 2 3 /* 4 * 分割功能练习 5 */ 6 public class RegexDemo2 { 7 public static void main(String[] args) { 8 // 定义一个字符串 9 String s1 = "aa,bb,cc"; 10 // 直接分割 11 String[] str1Array = s1.split(","); 12 for (in

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之javaIO类--RandomAccessFile类

java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素.4.其实该对象就是将字节输入流和输出流进行了封装.5.该对象只能对文件操作,目的和源只能是文件对象.通过看构造方法可以看得出来.RandomAccessFile(File file, String mode) RandomAccessFile(Str

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

java基础知识回顾之javaIO类--File类应用:删除带内容的目录

/** * 深度删除一个带内容的目录 * 原理:必须从里往外删除,需要深度遍历 * @author Administrator * */ public class FileDeleteList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:\\复件 demodir"); removedir(

java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:"+File.separator+"demodir

java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFilter filter)或者public File[] listFiles(FileFilter filter)方法,把FilenameFilter或者FileFilter接口对象作为参数传入,通过实现接口里面的 boolean accept(File dir, String name) 或者boo

java基础知识回顾之javaIO类--File类

File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读,获取当前文件的路径名,判断指定文件是否存在,获得当前文件的列表,创建.删除文件目录等方法. /**     * 构造方法:File f = new File("file.txt");//file.txt 相对路径     *       File f1 = new File("c