我想知道,因为我正在从教程中学习Java,并且有一个程序用于掷骰子1000次并打印它的频率。
book | user | phone
445 l 55
332 w 57
881 o 49
答案 0 :(得分:2)
总而言之,该程序模拟滚动六面骰子1000次,并记录每个掷骰数的 出现次数 。
public static void main(String[] args) {
Random r=new Random();
int arr[]= new int[7]; //Craete an array with 7 int elements
System.out.println("diceNo.\tFrequency");
for(int roll=1;roll<1000;roll++){ //Loop 1000 times
++arr[1+r.nextInt(6)]; //Randomly pick arr[1] to
} //arr[6] and plus one to it
for(int i=1;i<arr.length;i++){
System.out.println(i+"\t"+arr[i]); //Print occurrence of 1-6
}
}
违反以下代码:
++arr[1+r.nextInt(6)]; //r.nextInt(6) will be evaluated first:
r.nextInt(6)
会返回(0-5)
的随机值,因此您拥有:
++arr[1+(random 0 to 5)]; //+1 will be evaluated next:
因此,您生成的随机值为1-6
。接下来,向数组中添加1:
++arr[random 1 to 6]; //+1 to arr[1] or arr[2] or arr[3] or arr[4] or arr[5] or arr[6]
现在可以解释为:
arr[1] +=1; //or
arr[2] +=1; //or
arr[3] +=1; //or
arr[4] +=1; //or
arr[5] +=1; //or
arr[6] +=1;
因此,运行程序后,如果您的数组如下:
[0] [1] [2] [3] [4] [5] [6] Array index
+---+---+---+---+---+---+---+
| 0 |175|170|165|170|165|175| <-- arr
+---+---+---+---+---+---+---+
It means 1 was rolled 175 times,
2 was rolled 170 times,
3 was rolled 165 times,
and so on..
答案 1 :(得分:1)
r.nextInt(6)
生成一个0到5之间的随机整数。在它上面加1可以得到1到6之间的随机骰子。
arr
数组用于计算每次掷骰子发生的次数,因此++arr[1+r.nextInt(6)]
会增加当前掷骰的计数。
完成第一个循环后,arr[1]
保持1的数量,arr[2]
的数量为2,依此类推。
答案 2 :(得分:1)
1 + r.nextInt(6)
从1到6包含一个随机数。
++arr[1 + r.nextInt(6)];
递增数组arr
的元素。
因此建立了骰子卷的频率分布。不使用数组的第零个元素。这就是为什么它设置了7个元素。或许浪费?你告诉我。
答案 3 :(得分:0)
答案 4 :(得分:0)
此行等同于:
int number = r.nextInt(6); // Generates a random number between 0 and 6(exclusive)
int index = number + 1; // Since the faces of dice has value from 1 to 6
int value = arr[index];
and increases this number by 1;