如何修复骰子测试类中roll()方法故障,实现1000次掷骰频率统计?
修复掷骰子测试程序中的roll()方法问题
我来帮你排查并修复这个问题!首先,咱们先确认**骰子类(Die)**的正确实现,然后再修正测试程序里的常见错误。
第一步:正确实现Die类
你的Die类需要包含一个public的roll()方法,返回1到6之间的随机整数。这里要注意,Random.nextInt(n)会返回0到n-1的整数,所以必须加1才能得到1-6的范围。
import java.util.Random; public class Die { private Random randomGenerator; // 构造方法初始化随机数生成器 public Die() { randomGenerator = new Random(); } // 核心的roll方法,返回1-6的随机整数 public int roll() { // nextInt(6)生成0-5,加1后转为1-6 return randomGenerator.nextInt(6) + 1; } }
第二步:修复测试类的问题
测试程序无法正常工作,大概率是因为你没有正确调用Die类的roll()方法,而是自己在测试类里写了一个错误的实现。下面是正确的测试类代码:
public class DieRollTest { public static void main(String[] args) { final int TOTAL_ROLLS = 1000; // 用数组统计点数出现次数,索引0闲置,1-6对应点数1到6 int[] pointCounts = new int[7]; // 必须创建Die类的实例,通过实例调用它的roll方法 Die myDie = new Die(); // 执行1000次掷骰子 for (int i = 0; i < TOTAL_ROLLS; i++) { int result = myDie.roll(); // 调用Die类的public roll方法 pointCounts[result]++; } // 输出统计结果 System.out.println("1000次掷骰子的点数频率统计:"); for (int point = 1; point <= 6; point++) { double frequency = (double) pointCounts[point] / TOTAL_ROLLS * 100; System.out.printf("点数%d:出现%d次,频率%.2f%%%n", point, pointCounts[point], frequency); } } }
常见错误排查
如果你的测试类之前无法工作,可能是以下原因之一:
- 错误1:测试类自己实现了roll方法:你可能在测试类里写了一个
int roll()方法,但没有正确生成1-6的随机数,或者完全没有使用Die类的实例。 - 错误2:Die类的roll方法实现错误:比如直接返回
random.nextInt(6)(这样得到的是0-5,不符合需求),或者没有加1。 - 错误3:尝试静态调用roll方法:roll是实例方法,必须先创建Die的对象,才能调用它,不能用
Die.roll()这种静态调用方式。
运行效果
运行测试类后,你会看到类似这样的输出(每次结果会有随机波动,但各点数频率应该接近16.67%):
1000次掷骰子的点数频率统计:
点数1:出现162次,频率16.20%
点数2:出现175次,频率17.50%
点数3:出现168次,频率16.80%
点数4:出现159次,频率15.90%
点数5:出现167次,频率16.70%
点数6:出现169次,频率16.90%
内容的提问来源于stack exchange,提问作者Jianna
相关产品推荐
相关产品推荐

