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
相关产品推荐
相关产品推荐

