习题
8.(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色。
描述如下:
I.父类:Role(角色)。是所以职业的父类。
1).属性:name,表示角色的名字。
2).方法:public int attack(),该方法返回值为角色的攻击对敌人的伤害。
II.Role的第一个子类:Magicer(法师)
1).属性:魔法等级(范围为1~10)。
2).方法:public int attack(),该方法返回法师的攻击对敌人造成的伤害值。
III.Role的第二个子类:Soldier(战士)
1).属性:攻击伤害值
2).方法:public int attack(),该方法返回战士的攻击对敌人造成的伤害值。战士的攻击伤害值为:其攻击伤害属性值。
注意:上述的三个类所有属性都应当作为私有,并提供相应的get/set方法。
IV.再设计一个Team类,表示一个组队。具有如下方法:
1).addMenber,表示组队增加一个成员。
注意:组队成员最多为6人。
提示:应当利用一个数组属性,保存所有成员。
2).attackSum,表示组队所有成员进行攻击时,对敌人造成的总伤害值省略get/set方法后的类图如下:
10.在之前的游戏角色Role程序上进行修改。
I.创建Role接口,包含两个方法:
1).int attack();表示攻击,返回值表示对敌人的伤害
2).void practise();表示练习。练习之后对敌人的伤害会增加。
II.创建NamedRole类,该类为一个抽象类,实现了Role接口,并有两个属性:
1).name:角色的名字
2).age:角色的年龄
III.增加MagicStick接口。该接口表示法师使用的法杖。接口中包含一个方法:
1).int fire();
IV.为MagicStick类增加两个实现类,分别为GreenStick和BlackStick。其中,对于这两个类的fire方法:
1).GreenStick平时返回1,夏天(6~8月)使用时返回2
2).BlackStick奇数月返回1,偶数月返回2
V.修改Magicer类
1)为法师类增加MagicStick类的属性stick,表示法师使用的法权。
2) 让其继承自NamedRole类,并实现attack和practise功能。
a)int attack()返回值为法师的魔法等级(level)*每一级的固定伤害(5)
b)void practise()方法:
i.当法师的stick属性为null时,调用practise则level++
ii.当法师的stick不为null时,调用practise方法时,法师的等级level满足:level=level+1+stick.fire();
即:法师的等级增加为1+stick属性的fire方法的返回值。
VI.增加Weapon接口,表示战士使用的武器。Weapon接口中定义了两个方法:
1).void setSoldier(Soldier s);该方法表示设置武器的使用者
2).int fire();该方法的返回值表示战士使用该武器时,对敌人的伤害值
VII.为Weapon增加两个实现了,Bolo,表示大刀,Pike,表示长矛。对这两个实现类的描述如下:
1).Bolo:
a).当soldier的年龄大于等于18岁时,fire方法返回100
b).当soldier年龄小于18岁,fire方法返回50
2).Pike:Pike类有一个属性:name,表示长矛的名字。
a).当长矛的名字和战士的名字一致时,fire方法返回1000
b).当长矛的名字和战士的名字不一致时,fire方法返回25
VIII.修改Soldier类
1).为Soldier类增加一个Weapon属性,表示战士的武器
2).让其继承自NamedRole类,并实现attack和practise功能。其中
a).Soldier的attack()返回值为战士的hurt值与武器的fire()返回值的和,即:总攻击输出=战士的徒手伤害值+武器的伤害值
b).practise()方法:每调用一次则战士的hurt值+10
IX.编写相应的测试代码。
11.(Object类)有下面代码
interface IA{
void ma();
}
class MyClass implements IA{
public void ma() {
}
public String toString() {
return "MyClass toString()";
}
}
public class TestMyClass {
public static void main(String[] args) {
IA ia = new MyClass();
System.out.println(ia);
}
}
选择正确答案:C
A.编译不通过,因为IA接口中没有定义toString方法
B.编译通过,输出:“IA@地址”
C.编译通过,输出:"MyClass toString()"
12.(StringBuilder)给定一个长度,随机产生一个该长度的字符串,由大写、小写字母以及数字组成Java中随机数的生成:
java.util.Random r = new java.util.Random();
int a = r.nextInt(100):0~99的随机数
提示:生成int值,并将int值转换成ASCII编码对应一个字符。
import java.util.Random;
import java.util.Scanner;
public class RandomString {
public static final String allchar = "0123456789abcd"+"efghklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println