Java打击率计算方法输出异常求助:结果始终为0.0
解决打击率计算始终返回0.0的问题
嘿,我看到你的问题了——计算打击率一直返回0.0确实让人头疼,咱们来一步步排查问题:
问题1:构造方法遗漏doubles参数
你的BaseballPlayer构造方法里没有包含doubles(二垒打)参数,导致类中的doubles成员变量一直是默认值0。这不仅会让安打数计算不准确,还会间接影响最终的打击率结果。
问题2:整数除法导致小数截断
Java中,两个int类型的数值相除会执行整数除法,结果只保留整数部分。比如你的示例中,安打总数是12+0+13+4=29,打数是84,29/84用整数除法计算结果是0,再赋值给double类型的变量自然就变成了0.0。
修复方案
步骤1:修正构造方法
给构造方法添加doubles参数,并初始化成员变量:
//BaseballPlayer构造方法 public BaseballPlayer(String name, int number, int singles, int doubles, int triples, int homeRuns, int atBats, int walks, int sacrificeFlies) { this.name = name; this.number = number; this.singles = singles; this.doubles = doubles; // 新增二垒打成员变量初始化 this.triples = triples; this.homeRuns = homeRuns; this.atBats = atBats; this.walks = walks; this.sacrificeFlies = sacrificeFlies; }
步骤2:修改打击率计算方法,使用浮点数除法
将安打总数或打数转换为double类型,让除法运算保留小数部分:
// 打击率计算方法 public double getBattingAverage() { // 将安打总数转为double,触发浮点数除法 double totalHits = singles + doubles + triples + homeRuns; double average = totalHits / atBats; return average; } // 也可以用更简洁的写法: // return (double)(singles+doubles+triples+homeRuns) / atBats;
步骤3:修正主类的构造方法调用
现在构造方法多了doubles参数,调用时需要补上对应的数值(这里假设你漏传了,示例中暂填5,你可以根据实际数据调整):
BaseballPlayer player01 = new BaseballPlayer("Mr. Business",13,12,5,13,4,84,63,7); System.out.println(player01.getBattingAverage());
这样修改后,你的代码就能正确计算出打击率了。比如示例中的安打总数是12+5+13+4=34,打数是84,计算结果就是34/84≈0.4048,完全符合预期。
内容的提问来源于stack exchange,提问作者StaceyM
相关产品推荐
相关产品推荐

