Как посчитать и разделить последовательные броски головы или хвоста в программе броска монет java? - PullRequest
0 голосов
/ 18 ноября 2018

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

Я хочу этот вывод: HHHHTHTTTTTTTHTTTHHHTTTTHTTHHHTTTTHHTHHHHHTTTTTTHT

чтобы выглядело так: HHHH4 T1 H1 TTTTTTT7 H1 TTT3 HHH3 TTTT4 H1 TT2 HHH3 TTTT4 HH2 T1 HHHHH5 TTTTTT6 H1 T1

Я не уверен, как расположить условия в цикле так, чтобы между последовательными буквами «Т» и «Н» печатались пробелы и счетчик. Нужно ли использовать другой вид петли? Я попытался переставить цикл и использовать разрыв и продолжить; но не получили результат для правильной печати. ​​

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    System.out.print("How many times do you want to flip the coin? ");
    int timesFlipped = scnr.nextInt();
    Random randomNum = new Random();


    for (int i=0; i < timesFlipped; i++) {
        int currentflip = randomNum.nextInt(2);
        int previousFlip = 0;
        int tailsCount = 0;
        int headsCount = 0;

        if (currentflip == 0) {
            System.out.print("H");
            previousFlip = 0;
            headsCount++;
        }
        else if (currentflip == 1) {
            System.out.print("T");
            previousFlip = 1;
            tailsCount++;
        }

        if (previousFlip == 0 && currentflip == 1) {
            System.out.print(headsCount + " ");
            headsCount = 0;
        }
        else if (previousFlip == 1 && currentflip == 0) {
            System.out.print(tailsCount + " ");
            tailsCount = 0;
        }

    }


}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Одним способом:

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    System.out.print("How many times do you want to flip the coin? ");
    int timesFlipped = scnr.nextInt();
    if (timesFlipped <= 0)
        return;

    Random randomNum = new Random();
    boolean isHeads = false;
    int sequence = 0;

    for (int i = 0; i < timesFlipped; i++) {
        boolean prevFlip = isHeads;
        isHeads = randomNum.nextBoolean();
        if (i > 0 && isHeads != prevFlip) {
            System.out.print(sequence + " ");
            sequence = 0;
        }
        sequence++;
        System.out.print(isHeads ? "H" : "T");
    }

    System.out.println(sequence);
}
0 голосов
/ 18 ноября 2018

Вы можете просто сохранить последний флип и счетчик, как

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in);
    System.out.print("How many times do you want to flip the coin? ");
    int timesFlipped = scnr.nextInt();
    Random randomNum = new Random();

    int counter = 1;
    int previousFlip = randomNum.nextInt(2);
    printFlip(previousFlip);
    for (int i=1; i < timesFlipped; i++) {
        int currentflip = randomNum.nextInt(2);
        if (currentflip == previousFlip) {
            counter++;
        } else {
            System.out.print(counter + " ");
            counter = 1;
            previousFlip = currentflip;
        }

        printFlip(currentflip);
    }
    System.out.print(counter);

}

private static void printFlip(int currentflip) {
    if (currentflip == 0) {
        System.out.print("H");
    }
    else if (currentflip == 1) {
        System.out.print("T");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...