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

Java面向对象与继承入门练习求助:代码校验及语法问题咨询

问题解答

疑问1:int类型变量如何拼接为String返回

Java做字符串拼接时会自动将int等基本数据类型转为字符串,直接拼接即可,也可以用String.format()做格式化输出,示例如下:

// Destroyer类的toString()示例
@Override
public String toString() {
    return "驱逐舰信息:编号=" + id + " 乘客数=" + passengers + " 排水量=" + displacement 
            + " 火力值=" + force + " 火炮数量=" + guns + " 表面积=" + calculateSurfaceArea();
}

// 格式化写法更规整
@Override
public String toString() {
    return String.format("航空母舰[编号:%d, 乘客数:%d, 排水量:%d, 火力值:%d, 火炮数:%d, 舰载机数:%d]",
            id, passengers, displacement, force, guns, carriers);
}

疑问2:ArrayList无法识别的报错原因

有两个触发原因:

  • 未导入ArrayList的包,需要在代码文件最顶部加上导入语句:import java.util.ArrayList;
  • 你在Fleet类的成员变量上用了var声明,var仅支持Java10+的局部变量类型推断,成员变量必须显式指定类型,同时Fleet不需要继承Ship,修正后的Fleet类成员变量写法:
import java.util.ArrayList;
public class Fleet {
    protected ArrayList<Ship> shipList = new ArrayList<Ship>();
}

疑问3:main()方法的存放位置

按照题目要求,main方法需要放在Fleet类中,题目明确要求Fleet类包含main方法来完成对象创建、数据填充、方法调用的测试逻辑。


现有代码的其他问题修正
  • Ship类的第二个构造方法参数类型写错:it sideA改为int sideA
  • Ship类要求3个重载构造方法,目前仅实现了无参、全参两个,需要补充一个重载版本
  • 子类构造方法的Public首字母大写错误,Java访问修饰符是小写public
  • Destroyer的构造方法没有调用父类构造初始化继承的Ship属性,需要补全,示例:
public Destroyer(int id, int sideA, int sideB, int passengers, int displacement, int force, int guns) {
    // 调用父类构造初始化属性
    super(id, sideA, sideB, passengers, displacement);
    this.force = force;
    this.guns = guns;
}
  • AircraftCarrier类名拼写错误,你写的AirCraftCarrier多了大写C,要和题目要求一致为AircraftCarrier
  • 补充Fleet类的addToFleet和fleetStrength方法即可完成需求

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:45:03