我正在上一门 Java 编程课程,我们的任务之一是编写一个程序,该程序模拟用户指定次数的抛硬币。函数类 CoinToss.java 如下所示:
public class CoinToss {
private char[] results;
private int numHeads;
private int numTails;
private double headsFrac;
private double tailsFrac;
private int currentRun;
private char currentOutcome;
public CoinToss(int numTosses) {
results = new char[numTosses];
for(int i = 0; i < results.length; i++) {
double number = Math.random();
if(number < 0.5) {
results[i] = 't';
}
else {
results[i] = 'h';
}
}
}
public void count() {
for(int i = 0; i < results.length; i++) {
if(results[i] == 't') numTails++;
else numHeads++;
}
headsFrac = (double)numHeads/results.length;
tailsFrac = (double)numTails/results.length;
}
public double getFracHeads() {
return headsFrac;
}
public double getFracTails() {
return tailsFrac;
}
public char[] getTosses() {
return results;
}
public void getLongestRun() {
currentOutcome = 'h';
for(int i = 0; i < results.length; i++) {
if(currentOutcome == results[i]) {
currentRun++;
}
else {
currentOutcome = results[i];
currentRun = 1;
}
}
if(currentOutcome == 'h') {
System.out.println("Longest run was " + currentRun + " heads.");
}
else {
System.out.println("Longest run was " + currentRun + " tails.");
}
}
}
我主要关心的领域是getLongestRun()
方法。说明说:创建一个检查抛硬币数组的方法,以找出抛掷的正面或反面最长的可能序列。您将需要两个属性,这些属性具有当前连续结果的数量(一次运行)和与运行相关的结果(头部或尾部)。在一个循环中,将数组中的每次抛掷与当前运行的结果进行比较。如果它们匹配,则当前运行现在被识别为更长的运行。如果它们不匹配,则当前运行已结束。将本次运行中刚刚结束的连续结果的数量与之前看到的最多的连续结果(迄今为止最长的运行)进行比较。无论这是否是新的最长运行,将当前结果重置为刚刚检查的结果,并将当前运行的长度重置为 1。
我主要关心的是如何使该方法正常工作。它没有正确计算最长的连续正面或反面数量。