java—一个计算头尾最大条纹的程序

c6ubokkw  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(369)

这是我目前所拥有的,但我似乎不知道该怎么做。到目前为止,我只能存储翻转的头部和尾部的总量。

import java.util.*;
class Main {
    public static void main(String[] args) {
        int heads = 0, tails = 0;
        int usernum;
        int hc=0;

        Scanner scan = new Scanner(System.in);
        Coin myCoin = new Coin();
        System.out.println("The number flips: ");
        usernum=scan.nextInt();
        for (int count = 1; count <= usernum; count++)//this is where I'm having the most trouble, as I can't figure out how to store the greatest streak for heads and tails.
        {
            myCoin.flip();//generates either 1 or 0
            if (myCoin.isHeads())//checks if the integer is equal to 1 (which is heads in this case)
            {
                heads++;
                System.out.println("Heads");
                if (heads>=hc)
                   hc++;
            }else{
                tails++;
                hc=0;
                System.out.println("Tails");
            }
        }
        System.out.println("Heads: " + heads);
        System.out.println("Tails: " + tails);
    }
}
tvz2xvvm

tvz2xvvm1#

跟踪三个变量: headStreak , tailStreak ,和 maxStreak ,全部初始化为0。在for循环中,当遇到头部时,需要做3件事:
增量 headStreak 如果 tailStreak 大于 maxStreak ,套 maxStreaktailStreaktailStreak 到0。
当你遇到尾巴的时候做同样的事情,除了替换 headStreaktailStreak 反之亦然。
for循环之后: System.println(Math.max(Math.max(headStreak, tailStreak), maxStreak)) . 如果您正确地执行了这些步骤,它应该可以工作。

zqry0prt

zqry0prt2#

您可以应用以下算法来解决此问题:
你可以使用两个变量,比如 headStreak 以及 tailStreak 跟踪各自的条纹。当条纹中断时,将其重置为 1 .
你可以使用两个变量,比如 maxTailStreak 以及 maxHeadStreak 跟踪各条纹的最大值。
你可以用一个变量,比如 last 跟踪最后一次翻转的结果。从…开始 last = -1 设置为 1 万一 Heads ,和 0 万一 Tails .
演示:

import java.util.Random;
import java.util.Scanner;

class Coin {
    Random random = new Random();
    int result;

    public void flip() {
        result = random.nextInt(2);
    }

    public boolean isHeads() {
        return result == 1;
    }
}

public class Main {
    public static void main(String[] args) {
        int heads = 0, tails = 0;
        int usernum;
        int headStreak = 0, tailStreak = 0, last = -1, maxTailStreak = 0, maxHeadStreak = 0;

        Scanner scan = new Scanner(System.in);
        Coin myCoin = new Coin();
        System.out.print("The number flips: ");
        usernum = scan.nextInt();
        for (int count = 1; count <= usernum; count++) {
            myCoin.flip();
            if (myCoin.isHeads()) {
                heads++;
                System.out.println("Heads");
                if (last == 1 || last == -1) {
                    headStreak++;
                    if (headStreak >= maxHeadStreak) {
                        maxHeadStreak = headStreak;
                    }
                } else {
                    headStreak = 1;
                }
                last = 1;
            } else {
                tails++;
                System.out.println("Tails");
                if (last == 0 || last == -1) {
                    tailStreak++;
                    if (tailStreak >= maxTailStreak) {
                        maxTailStreak = tailStreak;
                    }
                } else {
                    tailStreak = 1;
                }
                last = 0;
            }
        }
        System.out.println("Heads: " + heads);
        System.out.println("Tails: " + tails);
        System.out.println("The longest streak of Heads: " + maxHeadStreak);
        System.out.println("The longest streak of Tails: " + maxTailStreak);
    }
}

示例运行:

The number flips: 10
Tails
Tails
Tails
Tails
Tails
Heads
Heads
Heads
Tails
Tails
Heads: 3
Tails: 7
The longest streak of Heads: 3
The longest streak of Tails: 5
bjp0bcyl

bjp0bcyl3#

您需要为每个条纹设置一个计数器,并获得如下最大值:

public static void main(String[] args) {

    int heads = 0, tails = 0;
    int usernum;
    int longestHeadStreak = 0, currentHeadStreak = 0, longestTailStreak = 0, currentTailStreak = 0  ;

    Scanner scan = new Scanner(System.in);
    Coin myCoin = new Coin();
    System.out.println("The number flips: ");
    usernum=scan.nextInt();
    for (int count = 1; count <= usernum; count++)//this is where I'm having the most trouble, as I can't figure out how to store the greatest streak for heads and tails.
    {
        myCoin.flip();//generates either 1 or 0
        if (myCoin.isHeads())//checks if the integer is equal to 1 (which is heads in this case)
        {
            currentTailStreak = 0;
            currentHeadStreak ++;
            System.out.println("Heads");
            if (currentHeadStreak>longestHeadStreak)
               longestHeadStreak=currentHeadStreak;
        }else{
            if (currentTailStreak>longestTailStreak) {
                longestTailStreak=currentTailStreak;
            }
            currentHeadStreak = 0;
            currentTailStreak++;
            System.out.println("Tails");
        }
    }
    System.out.println("Max streak of Heads: " + longestHeadStreak);
    System.out.println("Max streaks of Tails: " + longestTailStreak);
}

相关问题