Java程序设计第二次作业.docx
- 文档编号:7319393
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:15
- 大小:55.74KB
Java程序设计第二次作业.docx
《Java程序设计第二次作业.docx》由会员分享,可在线阅读,更多相关《Java程序设计第二次作业.docx(15页珍藏版)》请在冰豆网上搜索。
Java程序设计第二次作业
《Java程序设计》课程作业二
实验报告
1.定义一个表示学生信息Student类
(1)关键代码分析(见注释):
packagemyText;
importjava.io.*;
importjava.util.*;
publicclassStudentInformation{
publicstaticvoidmain(String[]args){
Students=newStudent(201221,"杨婧丽","女",20);
System.out.println(s.toString());
}
}
classStudent
{
//定义Student类的成员变量,包括学号,姓名,性别,年龄
privatelongstudentNumber;
privateStringstudentName;
privateStringstudentSex;
privateintstudentAge;
//Student类的构造方法,在构造方法中通过形参完成对成员变量的赋值操作
publicStudent(longstudentNumber,StringstudentName,StringstudentSex,intstudentAge)
{
this.studentNumber=studentNumber;
this.studentName=studentName;
this.studentSex=studentSex;
this.studentAge=studentAge;
}
//使用Getter和Setter方法以及toString()方法,输出学生的关键信息
publiclonggetStudentNumber(){
returnstudentNumber;
}
publicvoidsetStudentNumber(longstudentNumber){
this.studentNumber=studentNumber;
}
publicStringgetStudentName(){
returnstudentName;
}
publicvoidsetStudentName(StringstudentName){
this.studentName=studentName;
}
publicStringgetStudentSex(){
returnstudentSex;
}
publicvoidsetStudentSex(StringstudentSex){
this.studentSex=studentSex;
}
publicintgetStudentAge(){
returnstudentAge;
}
publicvoidsetStudentAge(intstudentAge){
this.studentAge=studentAge;
}
publicStringtoString(){
return"Student类中该学生的学号:
"+getStudentNumber()+",姓名:
"+getStudentName()+",性别:
"+getStudentSex()+",年龄:
"+getStudentAge();
}
}
(2)设计思路:
这部分代码比较基础,即先定义一个Student类,类中定义了成员变量,再编写构造方法和成员方法。
写构造方法时,将形式参数studentNumber的值传递给成员变量studentNumber,变量前面加上一个this关键字,其指的就是这个对象的成员变量或者方法,而不是指成员方法的形式参数或者局部变量。
为此在上面这个代码中,this.studentNumber代表的就是对象中的成员变量,又叫做对象的属性。
而后面的studentNumber则是方法的形式参数。
代码this.studentNumber=studentNumber;就是将形式参数的值传递给成员变量。
写成员方法时,Getter是对类对象的属性值的获得,Setter是对类对象的属性的赋值方法。
Java中的toString方法在Object类中已经存在。
由于Java中所有的类都继承自Object类,所以此方法存在于所有对象中,其作用是为了方便所有类的字符串操作。
查询Java的API文档后可以看到“建议所有子类都重写此方法”。
每次返回类实例,则用return语句来完成。
由以上方法便可输出学生的关键信息。
2.定义GraduateStudent继承Student类
(1)关键代码分析(见注释):
classGraduateStudentextendsStudent//定义GraduateStudent类,并继承Student类
{
//增加属性:
专业、导师、score(某门课程成绩)
privateStringmajor;
privateStringteacherName;
privateintscore;
publicGraduateStudent(longstudentNumber,StringstudentName,StringstudentSex,intstudentAge,Stringmajor,StringteacherName,intscore)
{
super(studentNumber,studentName,studentSex,studentAge);//调用父类的构造方法,一定要放在方法的首个语句
this.major=major;//在构造方法中通过形参完成对成员变量的赋值操作
this.teacherName=teacherName;
this.score=score;
}
publicStringgetMajor(){
returnmajor;
}
publicvoidsetMajor(Stringmajor){
this.major=major;
}
publicStringgetTeacherName(){
returnteacherName;
}
publicvoidsetTeacherName(StringteacherName){
this.teacherName=teacherName;
}
publicintgetScore(){
returnscore;
}
publicvoidsetScore(intscore){
this.score=score;
}
//重写toString()方法,输出研究生相关信息
publicStringtoString()
{
return"学号:
"+getStudentNumber()+"姓名:
"+getStudentName()+"性别:
"+getStudentSex()+"年龄:
"+getStudentAge()+"专业:
"+getMajor()+"导师:
"+getTeacherName()+"成绩:
"+getScore();
}
}
(2)设计思路:
这部分代码主要实现了类的继承,关键代码classGraduateStudentextendsStudent,在GraduateStudent类里写构造方法时,子类可以调用由父类声明的构造方法,但是必须在子类的构造方法中使用super关键字来调用,因为父类的构造方法中包括参数,则参数列表为必选项,用于指定父类构造方法的入口参数。
成员方法toString重写,即增加了新的成员变量,最后输出了研究生的关键信息。
3.创建多个GraduateStudent对象,存储于集合中,按学号从小到大的顺序向文件输出所有学生信息(每个学生信息占一行),并向文件输出这些学生课程成绩的平均值,以及成绩的最大值和最小值。
(1)关键代码分析(见注释):
publicclassStudentInformation{
publicstaticvoidmain(String[]args){
GraduateStudents1=newGraduateStudent(2012101,"陈琦","男",21,"通信工程","傅松",80);
GraduateStudents2=newGraduateStudent(2012105,"崔雪娇","女",22,"通信工程","郑瑾",90);
GraduateStudents3=newGraduateStudent(2012106,"董朝阳","男",22,"通信工程","罗雨峰",82);
GraduateStudents4=newGraduateStudent(2012110,"方卉","女",21,"通信工程","叶清",85);
GraduateStudents5=newGraduateStudent(2012103,"黄立明","男",22,"通信工程","孟凡超",90);
GraduateStudents6=newGraduateStudent(2012116,"李善超","男",20,"通信工程","王建",82);
GraduateStudents7=newGraduateStudent(2012109,"张磊","男",22,"通信工程","宗恒",97);
GraduateStudents8=newGraduateStudent(2012111,"彭璐","女",22,"通信工程","周华平",92);
GraduateStudents9=newGraduateStudent(2012108,"韩苗苗","女",21,"通信工程","王玉丽",81);
GraduateStudents10=newGraduateStudent(2012112,"时小鑫","男",22,"通信工程","胡晶",90);
List
students.add(s1);////把各个对象加到数组中去
students.add(s2);
students.add(s3);
students.add(s4);
students.add(s5);
students.add(s6);
students.add(s7);
students.add(s8);
students.add(s9);
students.add(s10);
Comparator
{
@Override
//比较学号,使学号按从小到大顺序输出
publicintcompare(Studentstu1,Studentstu2){
if(((GraduateStudent)stu1).getStudentNumber()>((GraduateStudent)stu2).getStudentNumber()){
return1;
}elseif(((GraduateStudent)stu1).getStudentNumber()==((GraduateStudent)stu2).getStudentNumber()){
return0;
}else{
return-1;
}
}
};
Collections.sort(students,comparator);////利用Collections类的静态方法sort进行排序
for(Studentstu:
students){
System.out.println("学号:
"+((GraduateStudent)stu).getStudentNumber()+"\t姓名:
"+stu.getStudentName()+"\t性别:
"+stu.getStudentSex()+"\t年龄:
"+stu.getStudentAge()+"\t专业:
"+((GraduateStudent)stu).getMajor()+"\t导师:
"+((GraduateStudent)stu).getTeacherName()+"\t成绩:
"+((GraduateStudent)stu).getScore());
}
int[]intArray={80,90,82,85,90,82,97,92,81,90};
GetArrayget=newGetArray();
get.getMaxArray(intArray);
get.getMinArray(intArray);
get.getAvgArray(intArray);
}
}
classGetArray
{
//求数组最大值
publicvoidgetMaxArray(int[]intArray){
intmaxArray=intArray[0];
for(inti=0;i if(intArray[i]>maxArray) { maxArray=intArray[i]; } } System.out.println("成绩的最大值: "+maxArray); } //求数组最小值 publicvoidgetMinArray(int[]intArray){ intminArray=intArray[0]; for(inti=0;i if(intArray[i] { minArray=intArray[i]; } } System.out.println("成绩的最小值: "+minArray); } //求数组的平均值 publicvoidgetAvgArray(int[]intArray){ intsum=0; intavg=0; for(inti=0;i { sum+=intArray[i]; } avg=sum/intArray.length; System.out.println("课程成绩的平均值: "+avg); } } (2)设计思路: 这部分代码编写起来稍有难度,使用了Java中的集合类List,Collection等,且Java的集合类包含在java.util包中,集合类只容纳对象。 先使用类型ArrayList集合定义ArrayList类型变量,用一个数组来存放所要排序的对象,然后把各个对象加到数组中去。 排序时,先实例化比较器,comparator可以看成一种算法的实现,在需要容器集合collection比较功能的时候,来指定这个比较器,这可以看成是一种设计模式,将算法和数据分离。 然后使用compare(a,b)方法,即根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。 然后利用Collections类的静态方法sort进行排序。 以上完成了按学号从小到大的顺序排列对象。 建立数组后,利用选择排序的方法找到成绩的最大值,即先假设第一个同学的成绩最高,然后按顺序遍历依次和后面的同学的成绩比较,不断修改数组的下标,最后返回最大成绩值,同样利用选择排序找到成绩的最小值。 计算成绩平均值比较简单,即遍历数组求和,再将总和除以数组的长度就可得平均值。 (3)运行结果: 截图如下: 如图所示,按学号从小到大的顺序输出多个学生信息,成绩的最大值为97,最小值为80,成绩的平均值为86,运行结果正确。 附实现所有要求的整体代码: packagemyText; importjava.io.*; importjava.util.*; publicclassStudentInformation{ publicstaticvoidmain(String[]args){ Students=newStudent(201221,"杨婧丽","女",20); System.out.println(s.toString()); GraduateStudents1=newGraduateStudent(2012101,"陈琦","男",21,"通信工程","傅松",80); GraduateStudents2=newGraduateStudent(2012105,"崔雪娇","女",22,"通信工程","郑瑾",90); GraduateStudents3=newGraduateStudent(2012106,"董朝阳","男",22,"通信工程","罗雨峰",82); GraduateStudents4=newGraduateStudent(2012110,"方卉","女",21,"通信工程","叶清",85); GraduateStudents5=newGraduateStudent(2012103,"黄立明","男",22,"通信工程","孟凡超",90); GraduateStudents6=newGraduateStudent(2012116,"李善超","男",20,"通信工程","王建",82); GraduateStudents7=newGraduateStudent(2012109,"张磊","男",22,"通信工程","宗恒",97); GraduateStudents8=newGraduateStudent(2012111,"彭璐","女",22,"通信工程","周华平",92); GraduateStudents9=newGraduateStudent(2012108,"韩苗苗","女",21,"通信工程","王玉丽",81); GraduateStudents10=newGraduateStudent(2012112,"时小鑫","男",22,"通信工程","胡晶",90); List students.add(s1); students.add(s2); students.add(s3); students.add(s4); students.add(s5); students.add(s6); students.add(s7); students.add(s8); students.add(s9); students.add(s10); Comparator @Override publicintcompare(Studentstu1,Studentstu2){ if(((GraduateStudent)stu1).getStudentNumber()>((GraduateStudent)stu2).getStudentNumber()){ return1; }elseif(((GraduateStudent)stu1).getStudentNumber()==((GraduateStudent)stu2).getStudentNumber()){ return0; }else{ return-1; } } }; Collections.sort(students,comparator); for(Studentstu: students){ System.out.println("学号: "+((GraduateStudent)stu).getStudentNumber()+"\t姓名: "+stu.getStudentName()+"\t性别: "+stu.getStudentSex()+"\t年龄: "+stu.getStudentAge()+"\t专业: "+((GraduateStudent)stu).getMajor()+"\t导师: "+((GraduateStudent)stu).getTeacherName()+"\t成绩: "+((GraduateStudent)stu).getScore()); } int[]intArray={80,90,82,85,90,82,97,92,81,90}; GetArrayget=newGetArray(); get.getMaxArray(intArray); get.getMinArray(intArray); get.getAvgArray(intArray); } } classStudent { privatelongstudentNumber; privateStringstudentName; privateStringstudentSex; privateintstudentAge; publicStudent(longstudentNumber,StringstudentName,StringstudentSex,intstudentAge) { this.studentNumber=studentNumber; this.studentName=studentName; this.studentSex=studentSex; this.studentAge=studentAge; } publiclonggetStudentNumber(){ returnstudentNumber; } publicvoidsetStudentNumber(longstudentNumber){ this.studentNumber=studentNumber; } publicStringgetStudentName(){ returnstudentName; } publicvoidsetStudentName(StringstudentName){ this.studentName=studentName; } publicStringgetStudentSex(){ returnstudentSex; } publicvoidsetStudentSex(StringstudentSex){ this.studentSex=studentSex; } public
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 程序设计 第二次 作业