Live2D
复制代码

06-数组作业

数组作业

问题描述:

写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队的所有武器)该类还提供一个构造方法,在构造方法里传一个int类型参数来限定该类所能拥有的的最大武器数量,并用这一大小来初始化数组w该类还提供一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。该类还有两个方法attackAll()让数组中的所有武器攻击;以及moveAll()让w数组中的所有武器移动。提示:Weapon是一个父类。应该有很多子武器,这些子武器有一些是可以攻击的,有一些是可移动的

实现:
package i数组作业武器数组;

/*
 * 该类中不应该写移动和攻击的方法,这些方法应该写在接口中,让子类具体武器去实现
 */
public class Weapon {
	
}

package i数组作业武器数组;

/*
 * 武器已填满异常
 */
public class WeaponIndexOutOfBoundsException extends Exception{
	
	public WeaponIndexOutOfBoundsException() {
		// TODO 自动生成的构造函数存根
	}
	
	public WeaponIndexOutOfBoundsException(String s) {
		// TODO 自动生成的构造函数存根
		super(s);
	}

}

package i数组作业武器数组;

/*
 * 移动接口
 */

public interface Moveable {
	//移动行为
	void move();

}

package i数组作业武器数组;

/*
 * 射击接口
 */

public interface Shootable {
	//射击行为
	void shoot();

}

package i数组作业武器数组;

/*
 * 战斗机是武器,可移动可发射
 */

public class Fighter extends Weapon implements Moveable,Shootable{
	
	@Override
	public void move() {
		// TODO 自动生成的方法存根
		System.out.println("战斗机急速飞行");
		
	}
	
	@Override
	public void shoot() {
		// TODO 自动生成的方法存根
		System.out.println("战斗机发射高柳炮弹");
	}

}

package i数组作业武器数组;
/*
 * 高射炮是武器,能发射但不能移动
 */
public class GaoShePao extends Weapon implements Shootable {

	@Override
	public void shoot() {
		// TODO 自动生成的方法存根
		System.out.println("高射炮发炮");
	}
	
}

package i数组作业武器数组;

/*
 * 运输机是武器,能移动不能射击
 */
public class YunShuJi extends Weapon implements Moveable{
	
	@Override
	public void move() {
		// TODO 自动生成的方法存根
		System.out.println("运输机转移基地");
	}
	

}

package i数组作业武器数组;

/*
 * 坦克是武器,能发射也能移动
 */

public class Tank extends Weapon implements Moveable,Shootable{
	
	@Override
	public void move() {
		// TODO 自动生成的方法存根
		System.out.println("坦克出动");
		
	}
	
	@Override
	public void shoot() {
		// TODO 自动生成的方法存根
		System.out.println("坦克发动炮击");
		
	}

}

package i数组作业武器数组;

/*
 * 		军队
 */
public class Army {
	
	/*
	 * 军队的一个属性,武器,有多种,以数组形式存在
	 */
	private Weapon[] weapons;
	
	/*
	 * 无参数的构建军队构造方法
	 */
	public Army() {
		// TODO 自动生成的构造函数存根
	}
	
	/**
	 * 
	 * @param count 武器数量
	 */
	public Army(int count) {
		// TODO 自动生成的构造函数存根
		//动态初始化数组中每一个元素默认值为null
		weapons = new Weapon[count];
	}
	
	/**
	 * 将武器加入数组
	 * @param weapon
	 * @throws WeaponIndexOutOfBoundsException 
	 */
	public void addWeapon(Weapon weapon) throws WeaponIndexOutOfBoundsException {
		
		for (int i = 0; i < weapons.length; i++) {

			if (null == weapons[i]) {
				weapons[i] = weapon;
				return;
			}
		}
		//如果程序执行到这说明武器没有添加成功,抛个异常,而且放在for循环外面
		throw new WeaponIndexOutOfBoundsException("武器以达到上限");
		
	}
	
	/**
	 * 让所有可攻击的武器攻击
	 */
	public void attackAll() {
		for (int i = 0; i < weapons.length; i++) {
			if (weapons[i] instanceof Shootable) {
				//调用子类中的特有方法,向下转型
				Shootable shootable = (Shootable)weapons[i];
				shootable.shoot();
			}
		}
	}
	
	
	/**	
	 * 让所有可移动的武器移动
	 */
	public void moveAll() {
		for (int i = 0; i < weapons.length; i++) {
			if (weapons[i] instanceof Moveable) {
				//调用子类中的特有方法,向下转型
				Moveable moveable = (Moveable)weapons[i];
				moveable.move();
			}
			}
	}
	
}

package i数组作业武器数组;

public class Test {
	
	public static void main(String[] args) {
		
		//创建军队
		Army army = new Army(4);
		
		//创建各式武器
		Weapon tank = new Tank();
		Weapon fighter = new Fighter();
		Weapon gaoshepao = new GaoShePao();
		Weapon yunshuji = new YunShuJi();
		
		//将武器放进军队的武器库数组中
		try {
			army.addWeapon(tank);
			army.addWeapon(fighter);
			army.addWeapon(gaoshepao);
			army.addWeapon(yunshuji);
			army.addWeapon(yunshuji);
		} catch (WeaponIndexOutOfBoundsException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
		//使所有能移动的武器移动
		army.moveAll();
		
		System.out.println("=============================");
		
		//使所有能攻击的武器攻击
		army.attackAll();
		
	}

}

posted @ 2021-07-24 18:56  Milen-jie  阅读(89)  评论(0编辑  收藏  举报