代码

/*开放型题目,随意发挥:写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器),该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击;以及moveAll()让w数组中的所有可移动的武器移动。写一个主方法去测试以上程序。提示:Weapon是一个父类。应该有很多子武器。这些子武器应该有一些是可移动的,有一些是可攻击的。*/
public class Homework1 {public static void main(String[] args) {Army army = new Army(10);try {army.addWeapon(new Cannon());army.addWeapon(new Handgun());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());army.addWeapon(new HospitalShip());} catch (WeaponException e) {e.printStackTrace();}army.attackAll();army.moveAll();}
}
/*
写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器),该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击;以及moveAll()让w数组中的所有可移动的武器移动。
*/
public class Army {private Weapon[] w;private int weaponsMaxNumber;//constructorpublic Army() {//默认武器数量为5this(5);}/**** @param weaponsMaxNumber 拥有最大武器的数量*/public Army(int weaponsMaxNumber) {this.weaponsMaxNumber = weaponsMaxNumber;this.w = new Weapon[weaponsMaxNumber];}/*** 往武器库中加入一个武器* @param weapon 武器*/public void addWeapon(Weapon weapon) throws WeaponException {//判断武器库是否已满if (findIndex() == w.length-1){throw new WeaponException("武器库已满,无法增加武器!");}w[findIndex()] = weapon;System.out.println("增加武器:" + weapon + "成功!");}/*** 找到为数组元素为空的最小数组下标* @return 武器库中可以存放武器的位置*/public int findIndex(){int index = -1;for (int i = 0; i < w.length; i++) {if (w[i] == null){index = i;break;}}return index;}/*** 让所有能够进攻的武器进攻*/public void attackAll(){for (int i = 0; i < findIndex(); i++) {w[i].attack();}}/*** 让所有能够移动的武器移动*/public void moveAll(){for (int i = 0; i < findIndex(); i++) {w[i].move();}}
}
public class Weapon implements Movable, Attacking{@Overridepublic void attack() {System.out.println("武器在攻击!");}@Overridepublic void move() {System.out.println("武器在移动!");}
}
public interface Movable {void move();
}
public interface Attacking {void attack();
}
public class Handgun extends Weapon{@Overridepublic void attack() {System.out.println("手枪在攻击!");}@Overridepublic String toString() {return "手枪";}@Overridepublic void move() {System.out.println("手枪在移动!");}
}
public class Cannon extends Weapon{@Overridepublic void attack() {System.out.println("迫击炮在攻击!");}@Overridepublic void move() {System.out.println("迫击炮在移动!");}@Overridepublic String toString() {return "迫击炮";}
}
public class HospitalShip extends Weapon{@Overridepublic void attack() {System.out.println("医院船在攻击!");}@Overridepublic void move() {System.out.println("医院船在移动!");}@Overridepublic String toString() {return "医院船";}
}
public class WeaponException extends Exception {public WeaponException(){}public WeaponException(String message){super(message);}
}

写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器), 该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有相关推荐

  1. jpa oracle 传参int类型判空_springboot学习-springboot使用spring-data-jpa操作MySQL数据库...

    我们在上一篇搭建了一个简单的springboot应用,这一篇将介绍使用spring-data-jpa操作数据库. 新建一个MySQL数据库,这里数据库名为springboot,建立user_info数 ...

  2. jpa oracle 传参int类型判空_企业级Java开发之图解JPA核心构件

    编者按: 企业级的软件开发中,Java一直都是中流砥柱.在Java EE8之后,Oracle公司把企业级Java标准控制权转交Eclipse基金.最新或·和以后的企业级Java将冠名为Jakarta ...

  3. jpa oracle 传参int类型判空_SQL查询:Oracle、mysql、HQL查询语句差异

    SQL是结构化查询语言,执行Select(选择).Update(更新).Delete(删除)和Insert(插入)等数据任务. mysql是一个关系型数据库,用于存储和检索数据. 关系数据库是指基于关 ...

  4. 如何往码云里上传项目文件?

    想要往码云里上传一个项目文件,首先,我们需要的工具有:①git shell(用来敲git指令)②你自己的码云账号 第一步,要注册一个码云账号,很简单,不过多复述,注册成功后登录,接下来进行第二步: 第 ...

  5. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )

    文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...

  6. 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个double类型的计算器

    import java.util.Scanner; public class Calculator { // 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个dou ...

  7. Java 学习 类和对象练习 设计一个类Armor护甲 继承Item类并且额外提供一个属性ac: 护甲等级 int类型 实例化出两件护甲 名称 价格 护甲等级 布甲 300 15 锁子甲 500 40

    设计一个类Armor护甲     继承Item类,并且额外提供一个属性ac: 护甲等级 int类型          实例化出两件护甲     名称 价格 护甲等级     布甲 300 15    ...

  8. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...

    前言:需求 这是一个Spring + Angular前后台分离的项目,目前有一个查看作业列表的功能,并且已经设置了分页和几个查询参数,如图. 现在需要增加一个已评阅和未评阅的查询功能. Work实体的 ...

  9. java定义一个类显示没有_Java 中的每个类都至少有一个构造方法,一个类中如果没有定义构造方法,系统会自动为这个类创建一个默认的构造方法。_学小易找答案...

    [单选题]关于 Java 语言叙述错误的是( ). [判断题]类中 static 修饰的变量或方法,可以使用类名或对象的引用变量访问. [命名题]命名下列化合物, [单选题]急性胰腺炎的主要临床表现是 ...

最新文章

  1. .com域名一定要实名认证吗
  2. c++ 函数模板_C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板
  3. 一些恶意软件的分析收集整理
  4. C\C++中声明与定义的区别
  5. redis rdb aof区别_理解Redis的持久化机制:RDB和AOF
  6. JavaIO流中的拷贝
  7. Linux lsof命令使用小结
  8. mysql的未提示输入密码
  9. android嵌入式面试题,嵌入式软件面试题 经典笔试题(含答案)
  10. PuTTY 远程连接矩池云GPU主机
  11. 多目标决策---多目标线性规划的解法
  12. HD Tune Pro硬盘检测工具官方版
  13. html青蛙跳跳游戏,《小青蛙跳跳》小班游戏教案
  14. 用C#实现自定义列表_艾孜尔江撰
  15. Google:我能把文本变成音乐,但这个 AI 模型不能对外发布!
  16. 为了热爱Jeez,请停止在软件中使用正则表达式
  17. Python 3.10 尝鲜
  18. 分享一个下载jar包的网站
  19. 计算机硬盘维修,笔记本电脑硬盘坏了怎么办 最详细解决方法【图文教程】
  20. linux系统类AE软件,一文详解 Linux系统常用监控工具

热门文章

  1. lucene 多索引目录搜索实现方法
  2. IBM 2013策略发布:大数据和分析、云计算、企业移动、社交商务、智慧商务、智慧城市...
  3. (android 实战总结)android第三方组件实现总结
  4. 程序猿们,如果你不想跑偏,就千万别读这4本书!
  5. 分析89万招聘数据后发现:华为平均月薪35K,Java需求下降
  6. 姚期智:算法将推动下一波AI浪潮,现有革新将达极限
  7. sqlserve 热备用状态更新_燃气地暖一个月费用多少钱?看完收藏备用
  8. 加速 SpringBoot 应用开发,官方热部署神器真带劲!
  9. 我终于搞清楚了和String有关的那点事儿。
  10. 自动化集成:Jenkins管理工具详解