第二次Java出题
均参与出题与答案
3.5部分:
判断题:
- int a[5];
a[0]=1;
此时a[0]结果是1
- 因为java是数组对象,所以要分配内存,样例:int a[5]=new int[5];
- Int []a=new int[5];可我们需要九个,不够用了,所以重新分配一块大点的内存int []a=new int[10];
1.Int [][]a=new int[][6];
2.Int [3][2]a={{1,2},{1,2},{1,2}};
选择题:
3.int [][]in= {{1,2},{3,4}};
int [][]in2= new int[2][2];
System.arraycopy(in, 0, in2, 0, 2);
in[0][0]=6;
System.out.println(in2[0][0]+in2[0][1]);
输出结果是:
A. 1 2
B. 3
C. 6 2
D. 8
判断选择答案:
判断题全 false
一.a[0]=1是错的,没有分配内存,就谈不上a[0]的数值了
二、动态分配前面不可以加那个5(也不要误以为静态分配就可以,貌似是都不可以。。。)
三.不可二次分配(数组大小是确定的),好像都不能写
四、先左后右
五、静态可以确认个数的时候,前面不可标记3 2
D 只拷贝第一维。6+2=8
3.3/3.4部分
编程题:
FIGHT吧,王者
注:读音参照摔跤吧,爸爸
定义一个王者荣耀成员父类Moba,
其公有数据成员有满血时血量full,名字name,当前血量blood、攻击力fire、防御defend,经验experience【初始化为0】,等级grade【初始化为1】
构造方法:Moba(String name,int blood,int fire,int defend,int full){}
抽象方法:public abstract void say();
公有方法包括死后复活back()【有两行输出,见样例】,升级promote()【等级加1,有一行输出】,死亡death()【一行输出】,互相攻击fight(moba a,moba b)【首先一行输出谁打谁;然后前者经验值增加500,后者生命值减少前者攻击力与后者防御力的差值,并判断前者是否升级(每当经验>=等级*1000时,升级),如果是,则调用相关函数;判断后者是否死亡,如果是,则调用相关函数;然后后者经验值增加500,前者生命值减少后者攻击力与前者防御力的差值,并判断后者是否升级(每当经验>=等级*1000时,升级),如果是,则调用相关函数;判断前者是否死亡,如果是,则调用相关函数;最后输出前者和后者各自的剩余血量】
以下三个类是Moba的子类,其数据成员如下
BaiLi百里守约:full和blood:400,fire:700,defend 400;重写的一个方法public
String toString()返回值参考样例最后一行输出 重写父类say方法,输出百里守约:关于取下敌人性命这件事,也从不失约!
SunWu孙悟空:full和blood:600,fire:500,defend 500;私有方法被火焰灼烧效果be_fired()【血量减少50】 重写父类say方法,输出孙悟空:俺老孙来也!
CaiWen蔡文姬:full和blood:1100,fire:200,defend 600;私有方法加血技能 add(moba ...a)【如果队友(包含自己)非阵亡状态并且非满血状态(满血状态有一行输出),才会执行加血(有两行输出,加至满血和未满血输出不同】
重写父类say方法,输出 蔡文姬:出发喽!蹂躏脑筋不好的老年人~
主方法和run方法已经给出,请编写这些类:
public static void run(Moba m) {
m.say();
}
public static void main(String[] args) {
SunWu sw=new SunWu();
BaiLi bl=new BaiLi();
CaiWen cw=new CaiWen();
Moba m=sw;
run(m);
m=bl;
run(m);
m=cw;
run(m);
System.out.println(sw instanceof Moba && bl instanceof Moba && cw instanceof Moba);
//孙悟空和百里守约互打
while(bl.blood>0&&sw.blood>0) {
Moba.fight(sw, bl);
}
//蔡文姬释放加血技能
cw.add(cw,bl,sw);
//复活战败者
if(bl.blood<=0) {
bl.back();
}
else {
sw.back();
}
//孙悟空被火焰烫伤
sw.be_fired();
//蔡文姬释放加血技能
cw.add(cw,bl,sw);
System.out.println(bl);
}
输出:
孙悟空:俺老孙来也!
百里守约:关于取下敌人性命这件事,也从不失约!
蔡文姬:出发喽!蹂躏脑筋不好的老年人~
true
孙悟空和百里守约打架
孙悟空剩余血量400
百里守约剩余血量300
孙悟空和百里守约打架
孙悟空升级 当前等级2
百里守约升级 当前等级2
孙悟空剩余血量200
百里守约剩余血量200
孙悟空和百里守约打架
孙悟空被击杀
孙悟空剩余血量0
百里守约剩余血量100
蔡文姬满血不需要加血
蔡文姬帮百里守约加血
百里守约此时的血量150
孙悟空复活ing
孙悟空复活
蔡文姬满血不需要加血
蔡文姬帮百里守约加血
百里守约此时的血量200
蔡文姬帮孙悟空加满血
孙悟空此时的血量600
BaiLi [name=百里守约, blood=200, fire=700, defend=400, experience=1500, full=400, grade=2]
答案:
package yqx_Moba;
public class Test {
//考察多态
public static void run(Moba m) {
m.say();
}
public static void main(String[] args) {
SunWu sw=new SunWu();
BaiLi bl=new BaiLi();
CaiWen cw=new CaiWen();
Moba m=sw;
run(m);
m=bl;
run(m);
m=cw;
run(m);
//小试instanceof(顺便避免不按套路出牌)
System.out.println(sw instanceof Moba && bl instanceof Moba && cw instanceof Moba);
//孙悟空和百里守约互打
while(bl.blood>0&&sw.blood>0) {
//类名.方法名访问类内静态方法
Moba.fight(sw, bl);
}
//蔡文姬释放加血技能
cw.add(cw,bl,sw);
//复活战败者
if(bl.blood<=0) {
bl.back();
}
else {
sw.back();
}
//孙悟空被火焰烫伤
sw.be_fired();
//蔡文姬释放加血技能
cw.add(cw,bl,sw);
//考察toString的改写
System.out.println(bl);
}
}
package yqx_Moba;
//抽象类
public abstract class Moba {
public String name;
public int blood;
public int fire;
public int defend;
//直接初始化
public int experience=0;
public int full;
public int grade=1;
Moba(String name,int blood,int fire,int defend,int full){
//this
this.name=name;
this.blood=blood;
this.fire=fire;
this.defend=defend;
this.full=full;
}
//static 供主方法使用 类.方法名 形式访问
public static void fight(Moba a,Moba b) {
System.out.println(a.name+"和"+b.name+"打架");
b.blood-=(a.fire-b.defend);
a.experience+=500;
a.blood-=(b.fire-a.defend);
b.experience+=500;
if(a.experience>=a.grade*1000) {
a.promote();
}
if(b.blood<=0) {
b.death();
}
if(b.experience>=b.grade*1000) {
b.promote();
}
if(a.blood<=0) {
a.death();
}
print_blood(a,b);
}
public void back() {
System.out.println(name+"复活ing");
blood=full;
System.out.println(name+"复活");
}
public void promote() {
grade++;
System.out.println(name+"升级"+" 当前等级"+grade);
}
public void death() {
System.out.println(name+"被击杀");
}
public static void print_blood(Moba ...a) {
for(int i=0;i<a.length;i++) {
System.out.println(a[i].name+"剩余血量"+a[i].blood);
}
}
//抽象方法
public abstract void say();
}
package yqx_Moba;
public class CaiWen extends Moba{
CaiWen(){
//super
super("蔡文姬",1400,200,600,1400);
}
//...的应用
public void add(Moba ...a) {
for(int i=0;i<a.length;i++) {
//死了就不加血了
int flag=0;
if(a[i].blood<=0) {
continue;
}
else if(a[i].blood==a[i].full) {
flag=1;
}
a[i].blood+=50;
if(a[i].blood>=a[i].full) {
a[i].blood=a[i].full;
}
if(flag==1) {
System.out.println(a[i].name+"满血不需要加血");
}
else if(a[i].blood==a[i].full)
{
if(a[i].name=="蔡文姬")
{
System.out.println("蔡文姬帮自己加满血");
}
else
{
System.out.println("蔡文姬帮"+a[i].name+"加满血");
}
System.out.println(a[i].name+"此时的血量"+a[i].blood);
}
else
{
if(a[i].name=="蔡文姬")
{
System.out.println("蔡文姬帮自己加血");
}
else
{
System.out.println("蔡文姬帮"+a[i].name+"加血");
}
System.out.println(a[i].name+"此时的血量"+a[i].blood);
}
}
}
//重写父类抽象方法
public void say() {
System.out.println("蔡文姬:出发喽!蹂躏脑筋不好的老年人~");
}
}
package yqx_Moba;
public class SunWu extends Moba{
SunWu(){
//super
super("孙悟空",600,500,500,600);
}
public void be_fired() {
blood-=50;
}
//重写父类抽象方法
public void say() {
System.out.println("孙悟空:俺老孙来也!");
}
}
package yqx_Moba;
public class BaiLi extends Moba{
BaiLi(){
//super
super("百里守约",400,700,400,400);
}
//重写父类抽象方法
public void say() {
System.out.println("百里守约:关于取下敌人姓名这件事,也从不失约!");
}
//重写Object类toString方法
@Override
public String toString() {
return "BaiLi [name=" + name + ", blood=" + blood + ", fire=" + fire + ", defend=" + defend + ", experience="
+ experience + ", full=" + full + ", grade=" + grade + "]";
}
}