首先:关于随机数的生成方法
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出现的次数132出现的次数16
3出现的次数17
4出现的次数23
5出现的次数21
6出现的次数10
输出: 当n=1000时
1出现的次数1602出现的次数177
3出现的次数161
4出现的次数169
5出现的次数175
6出现的次数158
结论:
n=100时, 6是次数是10, 4次数是23, 两者的次数相差2倍多
n=1000时, 6次数是158, 2次数是177, 两者比较接近
说明: 当随机的次数越多. 那么随机数的概率也越来越接近~
1.用内置方法Math.random()产生一个随机数介于0~1。2.强制转化为int类型,根据int类型的特点,这个数是0~5之间的整数。
3.得到的数加1,这样这个数就是介于1~6的整数,并且是随机的。
4.将介于1~6之间的这个整数赋值给randomNum
5.(重点)probability是个数组,这个程序的算法就是:利用probability这个数组记录随机数出现的次数,probability[0]记录随机数1出现的次数,就是当出现的随机数为1时,数组的probability[randomNum-1]项加1(randomNum-1是为了表现算法,实际的程序中是不需要先加1再减1的)。同理:其它的随意数也做这样的处理。这样,probability这个数组中[0]项保存的是1的出现次数,[1]项保存的是2出现的次数…………
6.输出随机数的值(后面加个空格“\t”)
7.循环到步骤第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之间(这种都是伪随机,但尽量接近概率)
你看看这样行不行
希望对你有帮助