You need to enable JavaScript to run this app. Java抛硬币程序:实现正反面最大连续次数统计的逻辑咨询
优惠活动
大模型
产品
解决方案
定价
更多

Java抛硬币程序:实现正反面最大连续次数统计的逻辑咨询

抛硬币最大连续次数统计修正方案

原有代码的核心逻辑漏洞

  • 未拆分计数变量的边界:把「所有正面总次数」「当前连续正面次数」「历史最长正面连续次数」三类完全独立的计数混为一谈,原代码中拿总正面数heads做连续值判断,逻辑完全错位
  • 连续计数逻辑缺失:仅设置了针对正面的连续变量hc,完全没有为反面的连续过程设计对应的计数、最大值存储逻辑
  • 连续值更新逻辑错误:原代码if (heads>=hc) hc++的判断不成立,heads是累计所有抛中的正面总量,不是当前连续段的长度,累计到后面会出现计数完全失真的问题

正确的实现逻辑

需要基于三类计数目标拆分独立变量,分别完成总次数统计、当前连续段计数、历史最大值存储:

  1. 复用原有heads/tails变量,继续存储正面、反面的累计总次数
  2. 新增两个当前连续段计数器:
    • currentHeadsStreak:记录当前正在连续抛出正面的次数,一旦抛出反面就立即清零
    • currentTailsStreak:记录当前正在连续抛出反面的次数,一旦抛出正面就立即清零
  3. 新增两个历史最大值存储变量:
    • maxHeadsStreak:存储整个流程中出现过的最长连续正面长度,每次更新当前连续正面计数时,同步比对更新最大值
    • maxTailsStreak:存储整个流程中出现过的最长连续反面长度,每次更新当前连续反面计数时,同步比对更新最大值
      每一轮抛硬币的循环流程调整为:
  • 抛出正面时:总正面数+1,当前连续正面数+1;将当前连续正面数和历史最大正面连续值比对,超出则更新最大值;将当前连续反面数清零
  • 抛出反面时:总反面数+1,当前连续反面数+1;将当前连续反面数和历史最大反面连续值比对,超出则更新最大值;将当前连续正面数清零

修正后的完整代码

import java.util.*;
class Main {
    public static void main(String[] args) {
        // 总次数统计,原有变量保留
        int heads = 0, tails = 0;
        int usernum;
        // 新增连续计数、最大连续计数变量
        int currentHeadsStreak = 0;
        int currentTailsStreak = 0;
        int maxHeadsStreak = 0;
        int maxTailsStreak = 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++)
        {
            myCoin.flip();
            if (myCoin.isHeads())
            {
                heads++;
                currentHeadsStreak++;
                // 更新最大正面连续值
                if (currentHeadsStreak > maxHeadsStreak) {
                    maxHeadsStreak = currentHeadsStreak;
                }
                // 切换到正面时,清零反面连续计数
                currentTailsStreak = 0;
                System.out.println("Heads");
            }else{
                tails++;
                currentTailsStreak++;
                // 更新最大反面连续值
                if (currentTailsStreak > maxTailsStreak) {
                    maxTailsStreak = currentTailsStreak;
                }
                // 切换到反面时,清零正面连续计数
                currentHeadsStreak = 0;
                System.out.println("Tails");
            }
        }
        // 原有总次数输出保留,新增最大连续值输出
        System.out.println("Total Heads: " + heads);
        System.out.println("Total Tails: " + tails);
        System.out.println("Max consecutive Heads: " + maxHeadsStreak);
        System.out.println("Max consecutive Tails: " + maxTailsStreak);
    }
}

注:代码中原有Coin类的实现无需修改,仅调整主循环内的计数逻辑即可正常运行。

内容的提问来源于stack exchange,提问作者johndoe123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.14 15:06:05