Java抛硬币实验问题:循环搭配方法调用无法正常返回值
问题原因
你当前代码逻辑和需求不匹配,问题出在flipForHeads方法的循环终止条件:现有代码是抛够goal次就直接返回,但需求要求的是累计凑够goal次正面才停止抛硬币。
另外注意单Java文件不允许存在两个public类,要么把两个类拆分到GVCoin.java、TossingCoins.java两个独立文件,要么删掉GVCoin的public修饰符。
修复方案
修改flipForHeads方法的逻辑,将循环判断条件改为判断累计正面数是否达到目标:
public int flipForHeads(GVCoin coin, int goal) { // 边界校验,避免传入非正数导致逻辑异常 if (goal <= 0) { return 0; } int totalFlips = 0; // 只要当前正面数没到目标就继续抛 while (coin.numHeads() < goal) { coin.flip(); totalFlips++; } return totalFlips; }
如果要保留do-while写法,调整判断条件即可:
public int flipForHeads(GVCoin coin, int goal) { if (goal <= 0) { return 0; } int totalFlips = 0; do { coin.flip(); totalFlips++; } while (coin.numHeads() < goal); return totalFlips; }
运行结果
使用你提供的种子15、目标100个正面运行修复后代码,输出结果为:
Total number of flips for 100 heads: 209
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

