java中如何以不同概率产生随机数1-30

Python06

java中如何以不同概率产生随机数1-30,第1张

Random rm = new Random()

int i = rm.nextInt(18)

int n = 0

if(i >8){

n = rm.nextInt(10)+1

}else if(i >2&&i <= 8){

n = rm.nextInt(11) + 10

}else if(i<=2){

n = rm.nextInt(11) + 20

}

这样生成的整数n是 3/6的概率在1-10之间,2/6的概率是在10-20之间,1/6的概率是在20-30之间(这种都是伪随机,但尽量接近概率)

你看看这样行不行

希望对你有帮助

几率差不多吧:以下有个程序,但是不能代表所有情况

package jspWeb

import java.io.BufferedReader

import java.io.File

import java.io.FileNotFoundException

import java.io.FileReader

import java.io.IOException

import java.util.ArrayList

import java.util.List

/**

 * 

 * @author itjob 远标培训

 *

 */

public class TestRead {

public static void main(String[] args) throws IOException {

int i = 0

List<Integer> nums = new ArrayList<Integer>() 

while(i < 10000){

i ++

int num = (int)(Math.random()*3)

nums.add(num)

}

//统计

double size = nums.size()

int count0 = 0

int count1 = 0

int count2 = 0

for(Integer n : nums){

switch (n) {

case 0:

count0 ++

break

case 1:

count1 ++

break

case 2:

count2 ++

break

default:

break

}

}

System.out.println("0几率:" + count0/size)

System.out.println("1几率:" + count1/size)

System.out.println("2几率:" + count2/size)

/**

 * 结果:

 * 0几率:0.3299

1几率:0.3433

2几率:0.3268

 */

}

}

首先:关于随机数的生成方法

java里生成随机数主要有2个方法比较常用.

1.Random类. 在 java.util.包里, 有多种方法可以随机产生int, long, double,boolean等类型

2.Math 类,在java.lang.包里, 可以生成一个[0~1)之间的随机浮点数

*备注* :a. )使用Random需要导包,但是使用Math无需导包. 

b.  )Math底层还是调用了Random类的nextDouble()方法

其次:关于随机数的代码

例如生成[1,6]之间的随机数

1 .Random的方法,生成的随机数

Random r= new Random()

int num1 = r.nextInt(6)+1//r.next(6)生成的是0~5之间的数字,需要+1,才是[1~6]之间的数字

2. Math的方法,进行随机数的生成

int num = (int) (Math.random() * 6) + 1

//(int) (Math.random() * 6) 生成的是0~5之间的整数

//需要+1 才是[1~6]的数字

关于次数统计的方案

1, 可以使用HashMap<K,V>的方法进行存储统计. 因为key不重复,所以key可以来存数字1~6, 而对应的V就可以用来存储出现的次数

2. 可以使用数组的方法来存出现的次数. 数字1~6 是连续的, 数组下标也是连续的.我们可以用下标[0~5] 来代表数字[1~6], 数组的每个格子用来存数字数字出现的次数

完整的代码

//本题使用数组来写代码比较方便,简洁.

import java.util.Random

public class RandomDemo {

public static void main(String[] args) {

int[] times = new int[6]//6个格子的数组,存储出现的次数

int n = 100//循环的次数

Random r= new Random()

for (int i = 0 i < n i++) {

int num = r.nextInt(6)+1//方法1 随机产生1~6的数字

//int num = (int) (Math.random() * 6) + 1//方法2 随机产生1~6的数字

times[num - 1] = times[num - 1] + 1//次数增加1

}

for (int i = 0 i < times.length i++) {

System.out.println((i + 1) + "出现的次数" + times[i])

}

}

}

输出:  当n=100时

1出现的次数13

2出现的次数16

3出现的次数17

4出现的次数23

5出现的次数21

6出现的次数10

输出: 当n=1000时

1出现的次数160

2出现的次数177

3出现的次数161

4出现的次数169

5出现的次数175

6出现的次数158

结论:

n=100时, 6是次数是10,  4次数是23,  两者的次数相差2倍多

n=1000时, 6次数是158, 2次数是177, 两者比较接近

说明:  当随机的次数越多. 那么随机数的概率也越来越接近~