java 中的骰子模拟
Dice simulation in java
我正在尝试模拟掷骰子 100 次,并打印我降落了多少次 1/2/3/4/5/6 的结果。到目前为止,这是我的代码:我正在尝试使用 while 循环进行分配,并且我需要使用 (Math.random( )*6 + 1) 来生成数字。
public class RollingDice {
public static void main(String args[]) {
int count = 0; // number of times die was rolled
int count1s = 0; // number of times 1 was rolled
int count2s = 0; // number of times 2 was rolled
int count3s = 0;
int count4s = 0;
int count5s = 0;
int count6s = 0;
while (count < 100) {
count1s = (int) (Math.random( )*6 + 1);
count2s = (int) (Math.random( )*6 + 1);
count3s = (int) (Math.random( )*6 + 1);
count4s = (int) (Math.random( )*6 + 1);
count5s = (int) (Math.random( )*6 + 1);
count6s = (int) (Math.random( )*6 + 1);
count++;
}
System.out.println("Number of times the die was rolled: "+ count);
System.out.println("Number of times 1 was rolled: " + count1s);
System.out.println("Number of times 2 was rolled: " + count2s);
System.out.println("Number of times 3 was rolled: " + count3s);
System.out.println("Number of times 4 was rolled: " + count4s);
System.out.println("Number of times 5 was rolled: " + count5s);
System.out.println("Number of times 6 was rolled: " + count6s);
}
}
我的代码当前打印:
Number of times the die was rolled: 100
Number of times 1 was rolled: 3
Number of times 2 was rolled: 1
Number of times 3 was rolled: 5
Number of times 4 was rolled: 2
Number of times 5 was rolled: 4
Number of times 6 was rolled: 4
如您所见,它滚动了 100 次,但它只保存了 1 次滚动的结果,而不是 100,我该如何解决这个问题?
在 while 循环的每次迭代中,您都在重新分配 count1s
、count2s
和其他值。相反,您应该做的是 "roll the dice" 然后查看它的值,然后增加适当的变量。
while (count < 100) {
int diceRoll = (int) (Math.random() * 6 + 1);
if (diceRoll == 1)
count1s++;
else if (diceRoll == 2)
count2s++;
// ... you get the idea
count++;
}
作为一个有趣的旁注,使用 Java 8 是一种更简单、更酷的方法。
Stream.generate(() -> (int) (Math.random() * 6 + 1))
.limit(100L)
.collect(Collectors.groupingBy(num -> num,
Collectors.counting()))
.forEach((num, count) -> System.out.println("number of times " + num + " was rolled: " + count));
因为你的逻辑不正确
在 while
循环中,您为每个掷骰子的出现时间分配了骰子值。
=> 每个总是 < 7 的计数器。
另外,每次你的调用 Math.random()
都会给你新的值 => 应该每次调用一次。
在这种情况下,使用switch - case
语句是正确的。
while (count < 100) {
int num = (int) (Math.random( )*6 + 1);
switch(num) {
case 1:
count1s++;
break;
case 2:
count2s++;
break;
case 3:
count3s++;
break;
case 4:
count4s++;
break;
case 5:
count5s++;
break;
case 6:
count6s++;
break;
}
count++;
}
每次替换前一卷的 data.You 都可以将逻辑重写为
// initialization
while(count < 100){
int currentRoll = (int) (Math.random() * 6 + 1);
if(currentRoll == 1)
count1s++;
// Same logic for all occurances
}
我正在尝试模拟掷骰子 100 次,并打印我降落了多少次 1/2/3/4/5/6 的结果。到目前为止,这是我的代码:我正在尝试使用 while 循环进行分配,并且我需要使用 (Math.random( )*6 + 1) 来生成数字。
public class RollingDice {
public static void main(String args[]) {
int count = 0; // number of times die was rolled
int count1s = 0; // number of times 1 was rolled
int count2s = 0; // number of times 2 was rolled
int count3s = 0;
int count4s = 0;
int count5s = 0;
int count6s = 0;
while (count < 100) {
count1s = (int) (Math.random( )*6 + 1);
count2s = (int) (Math.random( )*6 + 1);
count3s = (int) (Math.random( )*6 + 1);
count4s = (int) (Math.random( )*6 + 1);
count5s = (int) (Math.random( )*6 + 1);
count6s = (int) (Math.random( )*6 + 1);
count++;
}
System.out.println("Number of times the die was rolled: "+ count);
System.out.println("Number of times 1 was rolled: " + count1s);
System.out.println("Number of times 2 was rolled: " + count2s);
System.out.println("Number of times 3 was rolled: " + count3s);
System.out.println("Number of times 4 was rolled: " + count4s);
System.out.println("Number of times 5 was rolled: " + count5s);
System.out.println("Number of times 6 was rolled: " + count6s);
}
}
我的代码当前打印:
Number of times the die was rolled: 100
Number of times 1 was rolled: 3
Number of times 2 was rolled: 1
Number of times 3 was rolled: 5
Number of times 4 was rolled: 2
Number of times 5 was rolled: 4
Number of times 6 was rolled: 4
如您所见,它滚动了 100 次,但它只保存了 1 次滚动的结果,而不是 100,我该如何解决这个问题?
在 while 循环的每次迭代中,您都在重新分配 count1s
、count2s
和其他值。相反,您应该做的是 "roll the dice" 然后查看它的值,然后增加适当的变量。
while (count < 100) {
int diceRoll = (int) (Math.random() * 6 + 1);
if (diceRoll == 1)
count1s++;
else if (diceRoll == 2)
count2s++;
// ... you get the idea
count++;
}
作为一个有趣的旁注,使用 Java 8 是一种更简单、更酷的方法。
Stream.generate(() -> (int) (Math.random() * 6 + 1))
.limit(100L)
.collect(Collectors.groupingBy(num -> num,
Collectors.counting()))
.forEach((num, count) -> System.out.println("number of times " + num + " was rolled: " + count));
因为你的逻辑不正确
在 while
循环中,您为每个掷骰子的出现时间分配了骰子值。
=> 每个总是 < 7 的计数器。
另外,每次你的调用 Math.random()
都会给你新的值 => 应该每次调用一次。
在这种情况下,使用switch - case
语句是正确的。
while (count < 100) {
int num = (int) (Math.random( )*6 + 1);
switch(num) {
case 1:
count1s++;
break;
case 2:
count2s++;
break;
case 3:
count3s++;
break;
case 4:
count4s++;
break;
case 5:
count5s++;
break;
case 6:
count6s++;
break;
}
count++;
}
每次替换前一卷的 data.You 都可以将逻辑重写为
// initialization
while(count < 100){
int currentRoll = (int) (Math.random() * 6 + 1);
if(currentRoll == 1)
count1s++;
// Same logic for all occurances
}