Java基础数组-编写武器数组

简介: Java基础数组-编写武器数组

题目:


写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器),

该类还提供一个构造方法,在构造方法里通过传一个int类型的参数来限定该类所能拥有的最大武器数量,

并用这一大小来初始化数组w。


该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。

在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击;

以及moveAll()让w数组中的所有可移动的武器移动。


代码01:军队类Army.java


/**
 * 军队
 *
 * 类在强制类型转换过程中,如果是类转换成接口类型。
 * 那么类和接口之间不需要存在继承关系,也可以转换,
 * java语法中允许。
 */
public class Army {
    Weapon[] w;
    /**
     * 创建军队的构造方法
     * @param count  武器数量
     */
    public Army(int count){
        // 动态初始化数组中每一个元素默认值是null。
        // 武器数组是有了,但是武器数组中没有放武器。
        this.w = new Weapon[count];
    }
    /**
     * 将武器加入到数组
     * @param wa
     * @throws AddWeaponException
     */
    public void addWeapon(Weapon wa) throws AddWeaponException {
        for(int i=0;i<w.length;i++){
            // 把武器添加到空的位置上。
            if(null == w[i]){
               w[i] = wa;
               return;
            }
        }
        // 程序如果执行到此处说明,武器没有添加成功
        throw new AddWeaponException("武器数组添加异常!");
    }
    /**
     * 所有可攻击的武器攻击
     */
    public void attackAll(){
        //遍历数组
        for(int i=0;i< w.length;i++) {
            // 调用子类中特有的方法,向下转型。
            if (w[i] instanceof Moveable) {
                Moveable move = (Moveable) w[i];
                move.move();
            }
        }
    }
    /**
     * 所有可移动的武器移动
     */
    public void moveAll(){
        for(int i=0;i< w.length;i++){
            if(w[i] instanceof Shootable){
                Shootable shoot = (Shootable) w[i];
                shoot.shoot();
            }
        }
    }
}


代码02:移动接口Moveable


public interface Moveable {
    //武器移动方法
    void move();
}


代码03:攻击接口Shootable


public interface Shootable {
    //武器攻击方法
    void shoot();
}


代码04:武器父类Weapon.java


public class Weapon{}


代码04:坦克实现类Tank.java


//坦克武器,可以移动,可以攻击
public class Tank extends Weapon implements Moveable,Shootable{
    @Override
    public void move() {
        System.out.println("坦克在移动!");
    }
    @Override
    public void shoot() {
        System.out.println("坦克开炮!");
    }
}


代码05:战斗机实现类Fighter.java


//战斗机,可以移动,可以攻击
public class Fighter extends Weapon implements Moveable,Shootable{
    @Override
    public void move() {
        System.out.println("战斗机起飞!");
    }
    @Override
    public void shoot() {
        System.out.println("战斗机开炮!");
    }
}


代码06:高射炮实现类GaoShePao.java


//高射炮类,只能攻击,不能移动
public class GaoShePao extends Weapon implements Shootable{
    @Override
    public void shoot() {
        System.out.println("高射炮开炮!");
    }
}


代码07:物资实现类WuZiFeiJi.java


//运输战机,不能攻击,可以移动
public class WuZiFeiJi extends Weapon implements Moveable{
    @Override
    public void move() {
        System.out.println("运输机起飞!");
    }
}


代码08:自定义异常类AddWeaponException.java


public class AddWeaponException extends Exception{
    public AddWeaponException(){
    }
    public AddWeaponException(String s){
        super(s);
    }
}


代码08:测试类Test.java


public class Test {
    public static void main(String[] args) {
        //创建一个军队
        Army army = new Army(4);
        //创建坦克,战斗机对象,高射炮对象
        Fighter fighter = new Fighter();
        Tank tank = new Tank();
        GaoShePao gaoShePao = new GaoShePao();
        WuZiFeiJi wuZiFeiJi = new WuZiFeiJi();
        Fighter fighter2 = new Fighter();
        //往数组添加武器
        try {
            army.addWeapon(fighter);
            army.addWeapon(tank);
            army.addWeapon(gaoShePao);
            army.addWeapon(wuZiFeiJi);
            army.addWeapon(fighter2);
        } catch (AddWeaponException e) {
            System.out.println(e.getMessage());
        }
        // 让所有可移动的移动
        army.attackAll();
        // 让所有可攻击的攻击
        army.moveAll();
    }
}


测试:


0a2653c851af460fa595bd959398a8f1.png

目录
打赏
0
0
0
0
4
分享
相关文章
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
Java 中数组Array和列表List的转换
|
17天前
|
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
57 23
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
Java基础(六):数组
Java基础(六):数组
36 10
Java基础(六):数组
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
137 12
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
157 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
57 4
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
72 2
|
5月前
|
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
157 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等