编写一个模拟同时掷两个骰子的程序
要用Random类模拟产生第一个骰子,然后再产生第二个骰子,将第二个结果相加,相加的和等于7的可能性最大,等于2和12的可能性最小。
程序模拟掷3600次骰子,判断求和结果是否合理, 共有6种情况是7,故在3600次掷骰子的结果中应当有1/6的可能性是7。
问题分析:
模拟掷骰子,首先考虑它的随机性,使用Random类产生随机数进行掷骰子完成随机性分析,接着考虑随机性取值情况,骰子
的6个面的取值依次是1,2,3,4,5,6,骰子各面数值为整型数据。
所以应使用Random类中的 我们知道有可能会产生0,但我们掷骰子并不会产生0nextInt(int n)
方法,产生随机整数且为[0~n)之间的整数。
分析完之后,了解其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对象进行 *** 作。
运行结果为:
这里的结果没有展示完全。
读者可自行进行运行。
如果觉得内容稍可,请留下你们的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)