C#抛硬币程序问题:需实现连续三次抛出同一面才停止
如何修改抛硬币程序,直到某一面连续出现三次才停止?
你的问题很典型——刚开始写逻辑的时候很容易把「累计次数」和「连续次数」搞混,我来帮你理清楚怎么改。
先看你原来代码的核心问题:你用tail和head统计的是总共出现的次数,所以只要某一面总共出现3次就会停止,不管是不是连续的。但我们需要的是跟踪「连续出现的次数」,而不是总数。
修改思路
我们只需要两个额外的变量:
lastFlip:记录上一次抛硬币的结果(初始设为0,表示还没开始抛)currentStreak:记录当前连续出现同一面的次数(初始为0)
每次抛硬币后:
- 如果这次的结果和上一次一样,就把
currentStreak加1 - 如果不一样,就把
currentStreak重置为1,同时更新lastFlip为当前结果 - 循环的停止条件改成
currentStreak == 3——只要连续出现3次就停止
修改后的完整代码
int lastFlip = 0; // 0表示还没抛过,1代表反面,2代表正面 int currentStreak = 0; int counter = 0; Random rnd = new Random(); do { int throwing = rnd.Next(1, 3); Console.WriteLine(throwing); // 修正了你原来的变量名拼写错误:是throwing不是bacanje counter++; if (throwing == lastFlip) { currentStreak++; } else { currentStreak = 1; lastFlip = throwing; } } while (currentStreak != 3); Console.WriteLine($"总共抛了{counter}次,连续出现3次的是{(lastFlip == 1 ? "反面" : "正面")}");
额外说明
- 我修正了你代码里的小错误:
Console.WriteLine(bacanje);里的变量名拼写错误,应该是throwing - 最后加了一行输出,方便你验证最终结果:显示总共抛的次数,以及连续三次的是哪一面
这样修改后,程序就会一直抛硬币,直到某一面连续出现三次才停止,完全符合你的需求啦。
内容的提问来源于stack exchange,提问作者KacaMat
相关产品推荐
相关产品推荐

