JAVA进阶开发之(数组练习题)

1、题目:

  • 写一个Army类,代表一支军队
  • 这个类有一个属性,Weapon[ ]  w  数组,用来存储该军队所有武器
  • Army类提供一个构造方法,构造方法里面通过传递一个int类型的参数来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组 w
  • Army类提供一个addWeapon(Weapon wa)方法,表示把参数wa 所代表的武器加入到数组w中
  • 在这个类中还定义两个方法attrackAll()让w 数组中的所有武器攻击
  • 以及moevAll( )  让w 数组中的所有可移动的武器移动
  • 写一个主方法进行测试

 

 提示:

Weapon是一个父类,应该有很多子武器,这些子武器应该有一些是可以移动的,有一些是可以攻击的

 

代码演示:

创建武器类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:49
 * @Copyright 公司
 * 武器类
 */
public class Weapon {

}

创建移动的接口和射击的接口

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:45
 * @Copyright 公司
 * 可移动的接口
 */
public interface Moveable {
    /**
     * 可移动的行为
     */
    public void move();
}
package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:47
 * @Copyright 公司
 */
public interface Shootable {
    /**
     * 射击行为
     */
    public void shoot();
}

 

 

创建大炮类

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:52
 * @Copyright 公司
 * 大炮,不可移动,可射击
 */
public class DaPao extends Weapon implements Shootable{
    @Override
    public void shoot() {
        System.out.println("大炮射击");
    }
}

创建飞机类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:54
 * @Copyright 公司
 * 战斗机,可移动,可开炮
 */
public class Fighter extends Weapon implements Moveable,Shootable{
    @Override
    public void move() {
        System.out.println("飞机起飞");
    }

    @Override
    public void shoot() {
        System.out.println("飞机射击");
    }
}

创建坦克类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:49
 * @Copyright 公司
 * 坦克,可移动可射击
 */
public class Tank extends Weapon implements Moveable,Shootable{
    @Override
    public void move() {
        System.out.println("坦克移动");
    }

    @Override
    public void shoot() {
        System.out.println("坦克射击");
    }
}

创建物资飞机类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:55
 * @Copyright 公司
 * 物资飞机,可移动不可射击
 */
public class WuZiFly extends Weapon implements Moveable{
    @Override
    public void move() {
        System.out.println("物资飞机起飞");
    }
}

创建异常类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 21:22
 * @Copyright 公司
 */
public class WeaponIndexOutOfBoundException extends Exception{
    public WeaponIndexOutOfBoundException() {
    }

    public WeaponIndexOutOfBoundException(String message) {
        super(message);
    }
}

 

 

创建武器类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 20:57
 * @Copyright 公司
 * 军队
 */
public class Army {
    /**
     * 武器数组
     */
    private Weapon[] w;

    /**
     * 创建军队的方法
     * @param count 武器数量
     */
    public Army(int count) {
        //动态初始化数组
        Weapon[] w=new Weapon[count];
        this.w = w;
    }

    /**
     * 将武器加入数组
     * @param weapon
     */
    public void addWeapon(Weapon weapon) throws WeaponIndexOutOfBoundException {
        for (int i = 0; i <w.length; i++) {
            if(null==w[i]){
                w[i]=weapon;
                System.out.println(weapon+"武器添加成功");
                return;
            }
        }
        // 程序如果执行到此处说明,武器没有添加成功
        throw new WeaponIndexOutOfBoundException("武器数量已经超过武器数组长度");
    }

    /**
     * 所有可攻击的武器攻击
     */
    public void attackAll(){
        //其实就是遍历数组
        for (int i = 0; i <w.length; i++) {
            if (w[i] instanceof Shootable){
                //调用子类中特有的方法,向下转型
                //类在转成某个接口的时候,不需要有继承关系
                Shootable shootable=(Shootable) w[i];
                shootable.shoot();
            }
        }

    }

    /**
     * 所有可移动的武器移动
     */
    public void moveAll(){
        for (int i = 0; i <w.length; i++) {
            if (w[i] instanceof Moveable){
                //调用子类中特有的方法,向下转型
                //类在强制 类型转换的过程中,如果是类转换成接口类型,不需要有继承关系
                Moveable moveable= (Moveable) w[i];
                moveable.move();
            }
        }

    }

}

 

 

创建测试类:

package com.lbj.javase.array.homework;

/**
 * @author LBJ
 * @version V1.0
 * @Package com.lbj.javase.array.homework
 * @date 2021/3/26 22:36
 * @Copyright 公司
 */
public class Test {
    public static void main(String[] args) {
        //创建一个军队
        Army army=new Army(4);

        //创建武器
        DaPao daPao=new DaPao();
        DaPao daPao2=new DaPao();
        Fighter fighter=new Fighter();
        Tank tank=new Tank();
        WuZiFly wuZiFly=new WuZiFly();

        //军队中加入武器
        try {
            army.addWeapon(daPao);
            army.addWeapon(fighter);
            army.addWeapon(tank);
            army.addWeapon(wuZiFly);
            army.addWeapon(daPao2);
        } catch (WeaponIndexOutOfBoundException e) {
            System.out.println(e.getMessage());
        }

        //让所有可移动的移动
        army.moveAll();

        //让所有可射击的射击
        army.attackAll();
    }

}

结果:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=3649:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\test01-2021-1-20\out\production\test01-2021-1-20;C:\Users\14811\.m2\repository\junit\junit\3.8.2\junit-3.8.2.jar" com.lbj.javase.array.homework.Test
com.lbj.javase.array.homework.DaPao@1540e19d武器添加成功
com.lbj.javase.array.homework.Fighter@677327b6武器添加成功
com.lbj.javase.array.homework.Tank@14ae5a5武器添加成功
com.lbj.javase.array.homework.WuZiFly@7f31245a武器添加成功
武器数量已经超过武器数组长度
飞机起飞
坦克移动
物资飞机起飞
大炮射击
飞机射击
坦克射击

Process finished with exit code 0
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值