You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:01:28