硬币翻转序列

时间:2017-03-24 11:47:30

标签: java

我坚持这个项目。我必须编写一个生成HTH(121)的硬币翻转程序,我必须计算生成该序列需要多少次抛出。之后我需要计算序列的平均值。我将代码放在下面。例如:如果我得到

的输出
1112222222122122122211222121
28
11111122121
11
11121
5

然后我的平均值应为(28 + 11 + 5)/3=14.66667。但是,我对平均值进行了编码。我有for循环设置,但我不确定在何处或如何将代码放入平均值。

我在考虑做类似

的事情
int average= count/N;

但我不知道如何让每个计数相互添加,以及将这个数据放在编辑器上的位置,"计数无法解析为变量"

 package HTX_Program;


public class coinSequence {
        public static int coinFlip() {
            MultiDie coin= new MultiDie(2);
            coin.roll();
            int x = coin.getFaceValue();
            return x;
            }

public static void main(String[] args) {
    final int N=3;
    for(int i=0; i<N; i++){
    String sequenceSoFar = "";
    sequenceSoFar += coinFlip();
    sequenceSoFar += coinFlip();
    sequenceSoFar += coinFlip();
    int count = 3;
    if(!sequenceSoFar.equals("121")) {
        while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
            sequenceSoFar += coinFlip();
            count++;
        }
    }

    System.out.println(sequenceSoFar);
    System.out.println(count);
    }
    int average= count/N;
}
}

2 个答案:

答案 0 :(得分:2)

首先,您需要跟踪所有循环中的总翻转次数:

int totalFlips = 0;

然后你需要在每次翻转时增加它:

totalFlips++;

然后最后,在循环之后,您可以计算平均值:

// Note: You have to convert one of the integers to double in order to get correct result.
double average = totalFlips / (double)N;

这是完整的修改功能:

public static void main(String[] args) {
    final int N=3;
    int totalFlips = 0; // Track total flips.

    for(int i=0; i<N; i++){
        String sequenceSoFar = "";
        sequenceSoFar += coinFlip();
        sequenceSoFar += coinFlip();
        sequenceSoFar += coinFlip();
        int count = 3;
        totalFlips += 3; // add initial 3 flips to total.
        if(!sequenceSoFar.equals("121")) {
            while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
                sequenceSoFar += coinFlip();
                count++;
                totalFlips++; // increment total flips.
            }
        }

        System.out.println(sequenceSoFar);
        System.out.println(count);
    }

    double average = totalFlips / (double)N; // Calculate average.
}

答案 1 :(得分:0)

尽管博物馆的解决方案完全正确,但对于我来说,计算&#34;计数&#34;会感觉有点奇怪。在奔跑和&#34; totalFlips&#34;在运行期间。 我会做一次运行并添加该运行&#34;计数&#34;之后到了TotalFlips。 为了使它更加明显,我还将一次运行放在一个单独的方法中。 (以下代码基于musefan&#39; s):

public static void main(String[] args) {
    final int N=3;
    int totalFlips = 0; // Track total flips.

    for(int i=0; i<N; i++){
        int count = nbRollsInNewSequence();
        totalFlips += count;
    }

    double average = totalFlips / (double)N; // Calculate average.
}

//rolls a die until the sequence "121" comes up. 
//Prints this count and the sequence and then returns the count.
public static int nbRollsInNewSequence(){
    String sequenceSoFar = "";
    sequenceSoFar += coinFlip();
    sequenceSoFar += coinFlip();
    sequenceSoFar += coinFlip();
    int count = 3;
    if(!sequenceSoFar.equals("121")) {
        while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
            sequenceSoFar += coinFlip();
            count++;
        }
    }

    System.out.println(sequenceSoFar);
    System.out.println(count);
    return count;
}