1、编程实现需求
设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类 Postgraduate, 其中 Student 类是一个抽象类 , 它包含一些基本的学生信息如姓名、所学课程、课程成绩等 , 而 Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的主要差别是计算成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如表 1 所示。
表 1 成绩等级
本科生标准 | 研究生标准 | ||
80--100 | 优秀 | 90--100 | 优秀 |
70--80 | 良好 | 80--90 | 良好 |
60--70 | 一般 | 70--80 | 一般 |
50--60 | 及格 | 60--70 | 及格 |
50 以下 | 不及格 | 60 以下 | 不及格 |
假设某班级里有2名本科生和2名研究生 , 请编写程序输入学生姓名、所学课程名称(课程数不少于3门)及各课程的成绩,计算出学生的平均成绩,并根据平均成绩赋给相应的等级,最后输出所有学生的姓名、学生类别及等级。(此题关键是设计一个学生数组 , 既能存放本科生对象, 又能存放研究生对象,根据多态原理来实现需求)
代码:
import java.util.Date; import java.text.SimpleDateFormat; abstract class Student{ final static int coursecount=3; String name;//学生姓名 String coursename;//课程名字 int[] score;//成绩 int courseN;//课程编号 String studentType;//学生对象 String grade;//等级 public Student(String name){ this.name=name; score=new int[coursecount]; grade=null; } public abstract void calGrade();//计算等级 public String getname(){ return name; } public void setname(String name){ this.name=name; } public int[] getscorce(){ return score; } public void setscore(int[] score){ this.score=score; } //课程名字 public int getcourseScore(int courseN){ return score[courseN]=courseN; } //课程名字和各科分数 public void setcourseScore(int courseN,int courseScore){ this.score[courseN]=courseScore; System.out.println(name+"第"+courseN+"科的成绩为:"+courseScore); } public String getstudentType(){ return studentType; } public void setstudentType(String studentType){ this.studentType=studentType; } public String getgrade(){ return grade; } public void setgrade(String grade){ this.grade=grade; } } class Undergraduate extends Student{ public Undergraduate(String name){ super(name); studentType="本科生"; } public void calGrade(){ double total=0; double average; for(int i=0;i<coursecount;i++){ total+=score[i]; } average=total/coursecount;//计算平均分 if(average>=80&&average<100) grade = "优秀"; else if(average>=70&&average<80) grade = "良好"; else if(average>=60&&average<70) grade = "一般"; else if(average>=50&&average<60) grade = "及格"; else grade = "不及格"; } } class Postgraduate extends Student{ public Postgraduate(String name){ super(name); studentType="研究生"; } public void calGrade(){ int total=0;//初始化 double average; for(int i=0;i<coursecount;i++){ total+=score[i]; } average=total/coursecount; if(average>=90&&average<100) grade = "优秀"; else if(average>=80&&average<90) grade = "良好"; else if(average>=70&&average<80) grade = "一般"; else if(average>=60&&average<70) grade = "及格"; else grade = "不及格"; } } public class CourseTest{ public static void main(String[] args){ System.out.println("22/xx/xx"); Date d = new Date(); System.out.println("当前时间为:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); System.out.println("--------------------"); Student[] student=new Student[4]; student[0] = new Undergraduate("小红"); student[1] = new Postgraduate("小绿"); student[2] = new Postgraduate("小黑"); student[3] = new Undergraduate("小蓝"); for(int i=0;i<4;i++){ student[i].setcourseScore(0,60+2*i); student[i].setcourseScore(1,90); student[i].setcourseScore(2,85+i); System.out.println("--------------------"); } for(int i=0;i<4;i++){ student[i].calGrade(); } System.out.println("四名学生情况如下:"); for(int i=0;i<4;i++){ System.out.println(student[i].getname()+" "+ student[i].getstudentType()+" "+ student[i].getgrade()); } } }
2、开发一个战斗类游戏
游戏中涉及三个角色,每个角色均有一个ID号、血量两个属性,每个角色都有同一个移动(move)方法,此外每个角色都有一项必杀技,分别是降龙掌(surDragonPalm)、六脉剑(sixPulseSowrd)和一阳指(oneSunFinger)。请设计一个类,提供对角色ID号、血量的设置和查询,提供角色移动方法和必杀技方法,方法的输出可以使用一个打印相应方法被调用的语句来模拟,并对设计的类进行测试。要求设计的类中必须使用到面向对象设计中的抽象类和接口。
代码:
import java.util.Date; import java.text.SimpleDateFormat; interface Move{ public abstract void move(); } abstract class Player{ private String ID; private int blood; public Player(){} public Player(String ID,int blood){ this.ID=ID; this.blood=blood; } public String getID(){ return ID; } public void setID(String ID){ this.ID=ID; } public int getblood(){ return blood; } public void setblood(int blood){ this.blood=blood; } public abstract void killermove(); } class PlayerA extends Player{ public PlayerA(){} public PlayerA(String ID,int blood){ super(ID,blood); } public void killermove(){ System.out.println("必杀技为:降龙掌"); } } class PlayerB extends Player{ public PlayerB(){} public PlayerB(String ID,int blood){ super(ID,blood); } public void killermove(){ System.out.println("必杀技为:六脉剑"); } } class PlayerC extends Player{ public PlayerC(){} public PlayerC(String ID,int blood){ super(ID,blood); } public void killermove(){ System.out.println("必杀技为:一阳指"); } } class FightPlayerA extends PlayerA implements Move{ public FightPlayerA(){} public FightPlayerA(String ID,int blood){ super(ID,blood); } public void move(){ System.out.println("移动技能:闪现"); } } class FightPlayerB extends PlayerB implements Move{ public FightPlayerB(){} public FightPlayerB(String ID,int blood){ super(ID,blood); } public void move(){ System.out.println("移动技能:闪现"); } } class FightPlayerC extends PlayerC implements Move{ public FightPlayerC(){} public FightPlayerC(String ID,int blood){ super(ID,blood); } public void move(){ System.out.println("移动技能:闪现"); } } class GameTest{ public static void main(String[] args){ System.out.println("xx/xx/xx"); Date d = new Date(); System.out.println("当前时间为:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); System.out.println("--------------------"); FightPlayerA a=new FightPlayerA(); a.setID("第一个角色ID为:1111"); a.setblood(2000); System.out.println(a.getID()+"\n血量为:"+a.getblood()); a.move(); a.killermove(); System.out.println("-------------------"); FightPlayerB b=new FightPlayerB(); b.setID("第二个角色ID为:2222"); b.setblood(2100); System.out.println(b.getID()+"\n血量为:"+b.getblood()); b.move(); b.killermove(); System.out.println("-------------------"); FightPlayerC c=new FightPlayerC(); c.setID("第三个角色ID为:3333"); c.setblood(3000); System.out.println(c.getID()+"\n血量为:"+c.getblood()); c.move(); c.killermove(); System.out.println("-------------------"); } }
3、设计一个程序,要求通过调用一个内部类的方法输出“HelloWolrd!”
import java.util.Date;
import java.text.SimpleDateFormat;
interface Inter {
void show();
}
class Outher {
public static Inter method() {
return new Inter() {
public void show() {
System.out.println("HelloWord");
}
};
}
}
class OuterDemo {
public static void main(String[] args) {
System.out.println("xx/xx/xx");
Date d = new Date();
System.out.println("当前时间为:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
System.out.println("--------------------");
Outher.method().show();
}
}