Java语言描述----用Random类实现掷骰子求概率以及单词造句

Java语言描述----用Random类实现掷骰子求概率以及单词造句,第1张

看题

编写一个模拟同时掷两个骰子的程序
要用Random类模拟产生第一个骰子,然后再产生第二个骰子,将第二个结果相加,相加的和等于7的可能性最大,等于2和12的可能性最小。


程序模拟掷3600次骰子,判断求和结果是否合理, 共有6种情况是7,故在3600次掷骰子的结果中应当有1/6的可能性是7。


问题分析:
模拟掷骰子,首先考虑它的随机性,使用Random类产生随机数进行掷骰子完成随机性分析,接着考虑随机性取值情况,骰子


的6个面的取值依次是1,2,3,4,5,6,骰子各面数值为整型数据。


所以应使用Random类中的nextInt(int n)方法,产生随机整数且为[0~n)之间的整数。


我们知道有可能会产生0,但我们掷骰子并不会产生0,如果用数组来封装这个骰子的点数,因为数组的下标是从0开始取值的,所以我们模拟随机数掷骰子Random类中的nextInt(6)得到数组的0,1,2,3,4,5的6个下标,用数组下标对应的各元素的值来代表掷骰子的点数,从而就达到了随机掷骰子的整型点数




分析完之后,了解其Random的语法规则,首先我们应new一个Random类的对象来调用其nextInt()方法:

Random 对象名 = new Random();

int 变量名 = 对象名.nextInt(int n);

得到的随机数用变量装起来,int n即为产生[0,n)的整数

问题分析及理论知识解决完之后,看代码:

package com.other;
import java.util.Random;

public class RandomDice {
    public static void main(String[] args) {
        int i = 1;
        int j = 0;
        int sum = 0;
        int[] a = {1,2,3,4,5,6};
        Random r1 = new Random();
        Random r2 = new Random();
        while(i<=3600){
            int k = a[r1.nextInt(a.length)];
            int t = a[r1.nextInt(a.length)];
            sum = k+t;
            if(sum == 7){
                j++;
            }
            i++;
        }
        double x = (double)j/3600;
        System.out.println(x);
        double y = 1;
        double z = 6;
        System.out.println(y/z);
    }
}

运行结果为:

题中的要求是采用掷两次骰子相加,其实我们可以只new一个对象即可,因为采用Random 对象名 = new Random();方式new出来的对象每次引用产生的随机数都是不同的,但如果我们使用一个long型的种子seed创建伪随机数对象,每次实例化都会产生相同的对象,其语法规则为:Random 对象名 = new Random(long seed);,同时这里每次运行产生的结果都是不一样的。


读者可复制进行运行,这里的产生的结果与预估结果1/6之间的差值是在误差允许范围之内的,所以我们得出根据结果得出,求和结果是合理的,这里我们没有对2和12进行预估求解,如果想的话直接加变量及if语句即可或者将其变成Switch语句结构进行求值,我们只验证了掷骰子为7的概率。



同时,使用Random产生随机数作为数组下标还可以运用与单词造句,这两者的原理是一样的,看题:

编写一个采用随机函数生成句子的游戏。


现有4个字符串数组:article、noun、verb、preposition,它们的内容分别是:
the、a、one、some、any;
boy、girl、dog、town、car;
drove、jumped、ran、walked、skipped
to、from、over、under、on
依照句法要求:article+noun+verb+preposition+article+noun,编写程序以产生20个句子。



这里不再进行分析,直接看代码:

package com.other;

import java.util.Random;

public class RandomSentence {
    public static void main(String[] args) {
        String[] article=new  String[]{"the","a","one","some","any"};
        String[] noun=new String[]{"boy","girl","dog","town","car"};
        String[] verb=new String[]{"drove","jumped","ran","walked","skipped"};
        String[] preposition=new String[]{"to","from","over","under","on"};
        Random t=new Random();
        System.out.println("产生20个的随机句子为:");
        for(int i=0;i<20;i++) {
            String a = article[t.nextInt(article.length)];
            String b = noun[t.nextInt(noun.length)];
            String c = verb[t.nextInt(verb.length)];
            String d = preposition[t.nextInt(preposition.length)];
            String e = article[t.nextInt(article.length)];
            String f = noun[t.nextInt(noun.length)];
            System.out.println(a + " " + b + " " + c + " " + d + " " + e + " " + f + ".");
        }
    }
}

这里我们就只采用一个Random对象进行 *** 作。



运行结果为:

这里的结果没有展示完全。


读者可自行进行运行。


如果觉得内容稍可,请留下你们的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/567781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存