如何在Java投币程序中计算和分隔连续的头或尾翻转?

时间:2018-11-18 20:14:26

标签: java loops

我正在尝试在一个简单的Java投币程序中的连续运行之间添加空格和计数器。

我想要此输出:HHHHTHTTTTTTTHTTTHHHTTTTHTTHHHTTTTHHTHHHHTTTTTTHT

看起来像这样的打印:HHHH4 T1 H1 TTTTTTT7 H1 TTT3 HHH3 TTTT4 H1 TT2 HHH3 TTTT4 HH2 T1 HHHHH5 TTTTTT6 H1 T1

我不确定如何在循环中放置条件,以便在连续的“ T”和“ H”之间打印空格和计数器。我是否需要使用其他类型的循环?我试过重新安排循环并使用break;并继续;但没有得到正确打印的结果。

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 :(得分:0)

您可以只存储最后一个翻转和一个计数器,如

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");
    }
}

答案 1 :(得分:0)

通过一种方法:

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);
}