Java自定义Weight类计算平均重量时报/运算符操作数类型错误
报错根因
你抛出bad operand types for binary operator '/'错误的原因非常直接:Java不支持自定义类直接使用/这类算术运算符,你写的average = average / 3中,average是你自定义的Weight类型对象,Java没有内置逻辑知道该怎么把一个Weight对象除以整数,自然编译不通过。
修复方案
你不需要折腾运算符重载(Java本身也不支持运算符重载),直接利用你已经写好的单位转换逻辑就能实现平均计算,两步就能改完:
- 先修改Weight类中
toOunces()方法的访问权限,原来的private修饰导致外部类无法调用,改成public即可:// Weight类中修改toOunces方法的修饰符 public double toOunces() { return pounds * OUNCES_IN_A_POUND + ounces; } - 重写
findAverage方法的计算逻辑,不要直接对Weight对象做除法,先把总重量转成最小单位盎司做除法,再把结果转换回磅+盎司的格式构造新Weight对象:private static Weight findAverage(Weight w1, Weight w2, Weight w3) { Weight sum = new Weight(0, 0); sum.addTo(w1); sum.addTo(w2); sum.addTo(w3); // 转成总盎司后做除法,避免分别除磅和盎司带来的计算误差 double avgTotalOunces = sum.toOunces() / 3.0; // 拆分整磅数和剩余盎司数 int avgPounds = (int) (avgTotalOunces / 16); double avgOunces = avgTotalOunces % 16; Weight average = new Weight(avgPounds, avgOunces); System.out.println("\nThe average weight is " + average.toString()); return average; }
结果校验
用你main方法里的测试数据计算:
- weight1归一化后为26磅4盎司,合计420盎司
- weight2为30磅8盎司,合计488盎司
- weight3为23磅10盎司,合计378盎司
三者总盎司数为1286,除以3约为428.67盎司,拆分后为26磅12.67盎司,运行后输出结果符合预期,不会再抛出运算符类型错误。
内容的提问来源于stack exchange,提问作者spronks
相关产品推荐
相关产品推荐

