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

相关文章
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
28天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
28天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
22 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
46 9
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
23 3
|
1月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
28 6
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
23 1
|
1月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
14 1
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
下一篇
无影云桌面