实验报告四继承和多态 完整代码.docx

上传人:b****8 文档编号:29424721 上传时间:2023-07-23 格式:DOCX 页数:11 大小:121.68KB
下载 相关 举报
实验报告四继承和多态 完整代码.docx_第1页
第1页 / 共11页
实验报告四继承和多态 完整代码.docx_第2页
第2页 / 共11页
实验报告四继承和多态 完整代码.docx_第3页
第3页 / 共11页
实验报告四继承和多态 完整代码.docx_第4页
第4页 / 共11页
实验报告四继承和多态 完整代码.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验报告四继承和多态 完整代码.docx

《实验报告四继承和多态 完整代码.docx》由会员分享,可在线阅读,更多相关《实验报告四继承和多态 完整代码.docx(11页珍藏版)》请在冰豆网上搜索。

实验报告四继承和多态 完整代码.docx

实验报告四继承和多态完整代码

福建农林大学计算机与信息学院实验报告

计算机

专业

年级

12级

成绩

姓名

学号

实验室

机号

实验时间

教师签字

实验(四)继承和多态

一、实验目的和要求

1.掌握面向对象的继承关系

2.理解面向对象的多态

3.掌握方法的重写

4.掌握接口的实现

二、实验内容和原理

设计一个抽象类Shape,包括2个抽象方法,分别是计算形状的周长和面积。

设计具体类Rectangle和Circle,分别表示矩形和圆,它们都是Shapes的子类。

使Rectangle和Circle都实现Comparable接口(根据面积比较大小),编写一个通用的排序程序和一个通用的二分查找程序(自己写代码实现),能对这二种类型的数组进行排序并查找指定的对象。

三、实验环境

1.硬件环境:

2.软件环境:

JDK1.5

四、算法描述及实验步骤

1.算法描述(可以用类图、流程图、伪代码或源程序描述)

packagetest;

importjavax.swing.JOptionPane;

importjava.util.Scanner;

publicclassTest{

publicstaticvoidmain(String[]args){

System.out.println("要创建几个圆?

");

Scannera1=newScanner(System.in);

inta=a1.nextInt();

System.out.println("总共创建了"+a+"个圆\n请输入各个圆的半径:

");

Shape[]circle=newShape[a];

Scannerinput2=newScanner(System.in);

for(inti=0;i

circle[i]=newCircle(input2.nextDouble());

}

 

System.out.println("要创建几个矩形?

");

Scannerb2=newScanner(System.in);

intb=b2.nextInt();

Shape[]rectangle=newShape[b];

System.out.println("总共创建了"+b+"个矩形\n请依次输入各个矩形的长和宽:

");

Scannerc3=newScanner(System.in);

for(inti=0;i

rectangle[i]=newRectangle(c3.nextDouble(),c3.nextDouble());

}

 

Shape.sort(circle);

Stringstr1="";

for(inti=0;i

str1+=String.valueOf(i+1)+circle[i]+"\n";

}

System.out.println("您所创建的圆按半径由小到大排序如下:

\n"+str1);

Shape.sort(rectangle);

Stringstr2="";

for(inti=0;i

str2+=String.valueOf(i+1)+rectangle[i]+"\n";

}

System.out.println("您所创建的矩形按面积由小到大排序如下:

\n"+str2);

System.out.println("要查找的圆的半径?

");

Scannere5=newScanner(System.in);

doublee=e5.nextDouble();

Circlec1=newCircle(e);

if(Shape.search(circle,c1)!

=0){

System.out.println("所查找的圆的位置及其具体信息为:

\n"+Shape.search(circle,c1)+c1);

}else{

System.out.println("未找到符合的圆!

");

}

System.out.println("要查找的矩形的长和宽?

");

Scannerf6=newScanner(System.in);

Rectangler1=newRectangle(f6.nextDouble(),f6.nextDouble());

if(Shape.search(rectangle,r1)!

=0){

System.out.println("所查找的矩形的位置及其具体信息为:

\n"+Shape.search(rectangle,r1)+r1);

}else{

System.out.println("未找到符合的矩形!

");

}

}

}

 

classCircleextendsShape{

privatedoubleradius;

publicCircle(){

this(0);

}

publicCircle(doubleradius){

setRadius(radius);

}

publicdoublegetRadius(){

returnradius;

}

publicvoidsetRadius(doubleval){

this.radius=(val<0?

0:

val);

}

@Override

publicStringtoString(){

Stringstr="";

str+="圆半径:

"+radius+"周长:

"+String.format("%-6.2f",getPerimeter());

str+="面积:

"+String.format("%-6.2f",getArea());

returnstr;

}

protecteddoublegetPerimeter(){

return2*Math.PI*radius;

}

protecteddoublegetArea(){

returnMath.PI*radius*radius;

}

publicintcompareTo(Objecto){

if(radius>((Circle)o).radius){

return1;

}elseif(radius<((Circle)o).radius){

return-1;

}else{

return0;

}

}

}

abstractclassShapeimplementsComparable{

protectedabstractdoublegetPerimeter();

protectedabstractdoublegetArea();

publicstaticvoidsort(Shape[]list){

ShapecurrentMax;

intcurrentMaxIndex;

for(inti=list.length-1;i>=1;i--){

currentMax=list[i];

currentMaxIndex=i;

for(intj=i-1;j>=0;j--){

if(((Comparable)currentMax).compareTo(list[j])<0){

currentMax=list[j];

currentMaxIndex=j;

}

}

if(currentMaxIndex!

=i){

list[currentMaxIndex]=list[i];

list[i]=currentMax;

}

}

}

publicstaticintsearch(Shape[]list,Shapetarget){

intmid,low=0,high=list.length-1;

sort(list);

while(low<=high){

mid=(low+high)/2;

if(((Comparable)target).compareTo(list[mid])<0){

high=mid-1;

}elseif(((Comparable)target).compareTo(list[mid])>0){

low=mid+1;

}else{

returnmid+1;

}

}

return0;

}

}

classRectangleextendsShape{

privatedoublelength;

privatedoublewidth;

publicRectangle(doublelength,doublewidth){

setLength(length);

setWidth(width);

}

publicdoublegetLength(){

returnlength;

}

publicvoidsetLength(doubleval){

this.length=(val<=0?

1:

val);

}

publicdoublegetWidth(){

returnwidth;

}

publicvoidsetWidth(doubleval){

this.width=(val<=0?

1:

val);

}

@Override

publicStringtoString(){

Stringstr="";

str+="矩形长:

"+length+"宽:

"+width;

str+="周长:

"+String.format("%-6.2f",getPerimeter());

str+="面积:

"+String.format("%-6.2f",getArea());

returnstr;

}

protecteddoublegetPerimeter(){

return2*(length+width);

}

protecteddoublegetArea(){

returnlength*width;

}

publicintcompareTo(Objecto){

if(getArea()>((Rectangle)o).getArea()){

return1;

}elseif(getArea()<((Rectangle)o).getArea()){

return-1;

}else{

return0;

}

}

}

interfaceComparable{

intcompareTo(Objecto);

}

2.实验步骤

●创建一个UML项目,并设计类Shape、Rectangle和Circle,并建立描述Shape、Rectangle、Circle和Comparable间关系的类图

●创建一个Java应用项目

●把UML项目中的类自动生成代码到Java应用项目中

●实现类中的方法及通用的排序和检索程序

●进行编译

●进行测试,使用的测试用例:

输入:

预期输出:

 

五、调试过程

1.编译过程

记录算法实现中发现的语法错误及改正

2.调试过程

记录算法实现中发现的逻辑错误及改正,对每个测试用例,记录实际输出,并与预期输出进行比较,如果不同,分析产生错误的原因并改正。

输入:

预期输出:

实际输出:

分析

六、实验结果

用与测试用例不同的输入数据运行算法,写出得到的结果,并分析结果是否正确。

输入:

输出结果:

结果分析:

七、总结

对上机实验结果进行分析、上机的心得体会及改进意见。

附录:

如果原来的算法中发现了错误,在附录中附上改正后的算法实现。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1