代码
/*开放型题目,随意发挥:
写一个类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;
//constructor
public Army() {
//默认武器数量为5
this(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{
@Override
public void attack() {
System.out.println("武器在攻击!");
}
@Override
public void move() {
System.out.println("武器在移动!");
}
}
public interface Movable {
void move();
}
public interface Attacking {
void attack();
}
public class Handgun extends Weapon{
@Override
public void attack() {
System.out.println("手枪在攻击!");
}
@Override
public String toString() {
return "手枪";
}
@Override
public void move() {
System.out.println("手枪在移动!");
}
}
public class Cannon extends Weapon{
@Override
public void attack() {
System.out.println("迫击炮在攻击!");
}
@Override
public void move() {
System.out.println("迫击炮在移动!");
}
@Override
public String toString() {
return "迫击炮";
}
}
public class HospitalShip extends Weapon{
@Override
public void attack() {
System.out.println("医院船在攻击!");
}
@Override
public void move() {
System.out.println("医院船在移动!");
}
@Override
public String toString() {
return "医院船";
}
}
public class WeaponException extends Exception {
public WeaponException(){}
public WeaponException(String message){
super(message);
}
}