Не могу понять, как определить, сколько последовательных орлов в монетном флиппере

#java #random #while-loop

#java #Случайный #цикл while

Вопрос:

У меня есть проект, над которым я работаю в своем классе Java, и я не могу понять, что такое несколько строк кода.

Проект состоит из подбрасывания монеты и использования различных методов для определения количества орлов или решек, а также того, сколько переворотов произошло на данный момент.

 import java.util.*;

public class GVcoin{

// true for heads, false for tails
private boolean isHeads;
private int flips, heads;
private Random r;


//Create the coin 
public GVcoin(){
    r = new Random();
    heads = 0;
    flips = 0;
    isHeads = true;     
}

//Flip the coin by random choosing true / false
public void flip(){
    isHeads = r.nextBoolean();
    flips  ;
    if(isHeads){
        heads  ;
    }
}

//return true if coin is currently heads
public boolean isHeads(){
    return isHeads;
}    

//return String representation of important values
public String toString(){
    String str;
    str = "Flips: "   flips   " Heads: "   heads   " isHeads: "   isHeads;
    return str;
}    

//return number of total flips
public int numFlips(){
    return flips;
}

//return number of total heads  
public int numHeads(){
    return heads;
}

//return number of total tails
public int numTails(){
    return flips - heads;
}

//Set the coin to heads (or tails) to start
public void setToHeads(boolean h){
    isHeads = h;
}

//Create the coin with a random seed
public GVcoin(int seed){
    this();
    r = new Random(seed);
}    

}
  

Проблема, которую я, похоже, не могу понять, заключается в другом классе, называемом TossingCoins, и заключается в методе public int consecutiveHeads(GVcoin c, int goal)

 public class TossingCoins {

public int countHeads(GVcoin c, int goal){
    while(c.numHeads() != goal) {
        c.flip(); 
    } 
    return c.numFlips();
}

public int flipForTails(GVcoin c, int goal){
    while(c.numTails() != goal) {
        c.flip(); 
    } 
    return c.numFlips();
}

public int consecutiveHeads(GVcoin c, int goal){
    while(c.numHeads() != goal){
        c.flip();
    }
}
// This method creates a TossingCoins object and calls the method for testing
public static void main(String[] args) {
    TossingCoins game = new TossingCoins();
    GVcoin c = new GVcoin();
    int numHeads = game.countHeads(c, 100);
}
}
  

Что я пробовал до сих пор, так это посмотреть, не равно ли число орлов целевому значению. Тогда, если оно не равно количеству орлов (цель), я бы установил переворот, чтобы добавить один. Который будет считать 1, 2, 3, 4, 5 и так далее, пока не достигнет количества переворотов, необходимого для достижения количества орлов (цели).

Комментарии:

1. Что consecutiveHeads должно возвращаться?

2. Он вернет столько переворотов, сколько требуется для записи такого количества последовательных орлов (гол). например (5 голов), поэтому потребуется около 80 переворотов, чтобы получить 5 орлов подряд.

3. Ну, я просто не знаю, как структурировать цикл.

4. Приведенный выше код не работает?

5. Это не так. Я получаю сообщение об ошибке, в котором говорится, что sequutiveheads (c, 5) неправильно возвращает 8 вместо 50