Java语言程序设计A实验3接口剖析.docx

上传人:b****3 文档编号:5453720 上传时间:2022-12-16 格式:DOCX 页数:17 大小:149.77KB
下载 相关 举报
Java语言程序设计A实验3接口剖析.docx_第1页
第1页 / 共17页
Java语言程序设计A实验3接口剖析.docx_第2页
第2页 / 共17页
Java语言程序设计A实验3接口剖析.docx_第3页
第3页 / 共17页
Java语言程序设计A实验3接口剖析.docx_第4页
第4页 / 共17页
Java语言程序设计A实验3接口剖析.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

Java语言程序设计A实验3接口剖析.docx

《Java语言程序设计A实验3接口剖析.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A实验3接口剖析.docx(17页珍藏版)》请在冰豆网上搜索。

Java语言程序设计A实验3接口剖析.docx

Java语言程序设计A实验3接口剖析

实验课程名称:

Java语言程序设计A

实验项目名称

实验3:

接口

实验成绩

实验者

专业班级

组别

同组者

开始日期

第一部分:

实验预习报告(包括实验目的及意义,实验基本原理与方法,主要仪器设备及耗材,实验内容及要求,实验方案与技术路线等)

一.实验目的及意义

1.自定义接口。

2.自定义类实现接口。

3.接口及实现类的多态处理。

二.实验基本原理与方法

1.接口的概念。

2.接口对多态的支持。

三.主要仪器设备及耗材

1.PC及其兼容机。

2.计算机操作系统。

3.程序编辑器EditPlus/Eclipse。

4.Java开发工具JDK。

四.实验内容及要求

自定义形状接口Shape,该接口声明了计算面积、周长的方法。

然后,分别编写三角形类Triangle、六边形类Hexagon、椭圆形类Ellipse,它们都实现了Shape接口。

最后,编写测试类ShapesDemo,多态地创建各种形状对象,计算面积、周长。

五.实验方案及技术路线(含各种形状面积、周长的计算公式,UML类图,注意事项)

因为每种形状的面积、周长计算所需要的参数个数不同,并且不同类型的三角形计算周长的面积的方法也不同,所以抽象类的参数就定为可变长度集合ArrayList,一般三角形的面积S=a*h/2,周长L=a+b+c;直角三角形面积S=a*b,周长L=a+b+

,等边三角形的面积S=

,周长L=3*a;六边形的面积S=

,周长L=6*a。

以下是简略的UML类图:

1)接口Shape

2)三角形类Triangle

3)六边形类

4)椭圆形类

第二部分:

实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)

⏹Shape接口:

importjava.util.List;

publicinterfaceShape

{

publicdoubleculArea(Listlist);

publicdoubleculGirth(Listlist);

}

⏹六边形类Hexagon:

importjava.util.*;

publicclassHexagonimplementsShape

{

privatedoublea;

ListlistData=newArrayList();

publicHexagon(doublea)

{

this.a=a;

listData.add(a);

}

@Override

publicdoubleculArea(Listlist){

doubles=0;

s=Math.sqrt(3)*3*Math.pow(list.get(0),2)/2;

returns;

}

@Override

publicdoubleculGirth(Listlist){

doublel=0;

l=list.get(0)*6;

returnl;}

publicListgetListData(){

returnlistData;

}

}

⏹三角形类Triangle:

importjava.util.*;

publicclassTriangleimplementsShape{

privatedoublea;

privatedoubleb;

privatedoublec;

privatedoubleh;

ListlistData=newArrayList();

publicTriangle(doublea)

{

this.a=a;

listData.add(1.0);

listData.add(a);

}

publicTriangle(doublea,doubleb){

this.a=a;

this.b=b;

listData.add(2.0);

listData.add(a);

listData.add(b);

}

publicTriangle(doublea,doubleb,doublec,doubleh)

{

super();

this.a=a;

this.b=b;

this.c=c;

this.h=h;

listData.add(3.0);

listData.add(a);

listData.add(b);

listData.add(c);

listData.add(h);

}

publicListgetListData()

{returnlistData;}

publicvoidsetListData(ListlistData)

{

this.listData=listData;

}

@Override

publicdoubleculArea(Listlist)

{

doubles=0;

if(list.get(0)==1.0)

{s=Math.sqrt(3)*Math.pow(list.get

(1),2)/4;}

if(list.get(0)==2.0)

{s=list.get

(1)*list.get

(2)/2;}

if(list.get(0)==3.0)

{s=list.get

(1)*list.get(4)/2;}

returns;}

@Override

publicdoubleculGirth(Listlist){

doublel=0;

if(list.get(0)==1.0)

{l=3*list.get

(1);}

if(list.get(0)==2.0)

{

l=list.get

(1)+list.get

(2)+Math.sqrt(Math.pow(list.get

(1),2)+Math.pow(list.get

(2),2));

}

if(list.get(0)==3.0)

{

l=list.get

(1)+list.get

(2)+list.get(3);

}

returnl;

}

}

⏹测试类ShapesDemo:

publicclassShapesDemo{

publicstaticvoidmain(String[]args)

{

menuStrip();

}

publicstaticvoidmenuStrip()

{

Scannersc=newScanner(System.in);

Stringchoice=null;

do{

System.out.println("选择需要计算面积和周长的图形形状。

");

System.out.println("1.三角形");

System.out.println("2.正六边形");

System.out.println("3.椭圆形");

System.out.println("4.退出");

System.out.println("请输入选项【1-4】");

choice=sc.next();

switch(choice){

case"1":

option1();break;

case"2":

option2();break;

case"3":

option3();break;

case"4":

System.exit(0);

default:

System.err.println("输入错误!

");

menuStrip();

}

}while(!

(choice.equals("4")));}

privatestaticvoidoption1()

{

Scannersc1=newScanner(System.in);

StringtempChoice=null;

System.out.println("请选择需要三角形的类型。

");

System.out.println("1.等边三角形");

System.out.println("2.直角形");

System.out.println("3.普通");

System.out.println("请输入选项【1-3】(返回上一级请输入'0')");

tempChoice=sc1.next();

if(tempChoice.equals("1"))

{

try{

for(;;)

{System.out.print("请输入等边三角形的边长:

");

doubleaIn=sc1.nextDouble();

if(aIn>0)

{Triangletriangle1=newTriangle(aIn);

doublearea=triangle1.culArea(triangle1.getListData());

doublegirth=triangle1.culGirth(triangle1.getListData());

System.out.println("此三角形的面积为:

"+area+"\n此三角形的周长为:

"+girth);

break;

}

else

{System.err.println("输入错误,请输入大于0的数值!

");

}

}

}catch(Exceptione)

{System.err.println("输入错误,请重新输入!

");

option1();

}

}

elseif(tempChoice.equals("2")){

try{

for(;;)

{System.out.print("请输入一条直角边长:

");

doubleaIn=sc1.nextDouble();

System.out.print("请输入另一条直角边长:

");

doublebIn=sc1.nextDouble();

if(aIn>0&&bIn>0)

{Triangletriangle1=newTriangle(aIn,bIn);

doublearea=triangle1.culArea(triangle1.getListData());

doublegirth=triangle1.culGirth(triangle1.getListData());

System.out.println("此三角形的面积为:

"+area+"\n此三角形的周长为:

"+girth);

break;}

else

{System.err.println("输入错误,请输入大于0的数值!

");

}

}

}catch(Exceptione)

{System.err.println("输入错误,请重新输入!

");option1();}

}

elseif(tempChoice.equals("3"))

{

try{

for(;;)

{

System.out.print("请输入三角形底边长:

");

doubleaIn=sc1.nextDouble();

System.out.print("请输入高:

");

doublehIn=sc1.nextDouble();

System.out.print("请输入三角形一条侧边边长:

");

doublebIn=sc1.nextDouble();

System.out.print("请输入三角形另一条侧边边长:

");

doublecIn=sc1.nextDouble();

if(aIn>0&&bIn>0&&cIn>0&&hIn>0)

{if((aIn+bIn)>cIn&&(aIn+cIn)>bIn&&(bIn+cIn)>aIn)

{Triangletriangle1=newTriangle(aIn,bIn,cIn,hIn);

doublearea=triangle1.culArea(triangle1.getListData());

doublegirth=triangle1.culGirth(triangle1.getListData());

System.out.println("此三角形的面积为:

"+area+"\n此三角形的周长为:

"+girth);

break;}

else

{System.err.println("输入错误!

不能构成三角形!

请重新输入数.");

}}

else

{System.err.println("输入错误,请输入大于0的数值!

");

}}

}catch(Exceptione)

{

System.err.println("输入错误,请重新输入!

");

option1();

}}

elseif(tempChoice.equals("0"))

{menuStrip();}

else

{

System.err.println("输入错误!

");

Stringc=reChoice();

if(c.equals("1"))

{option1();}

else

{//返回主菜单

}}

}

privatestaticvoidoption2()

{Scannersc2=newScanner(System.in);

Stringc=reChoice();

if(c.equals("1")){

try{

for(;;)

{

System.out.print("请输入正六边形的边长:

");

doubleaIn=sc2.nextDouble();

if(aIn>0)

{

Hexagonhexagon=newHexagon(aIn);

doublearea=hexagon.culArea(hexagon.getListData());

doublegirth=hexagon.culGirth(hexagon.getListData());

System.out.println("此正六边形的面积为:

"+area+"\n此正六边形的周长为:

"+girth);

break;}

else

{System.err.println("输入错误,请输入大于0的数值!

");

}}

}catch(Exceptione)

{System.err.println("输入错误,请重新输入!

");

option2();

}}

else

{//返回主菜单

menuStrip();

}}

privatestaticvoidoption3()

{

Scannersc3=newScanner(System.in);

Stringc=reChoice();

if(c.equals("1"))

{

try{

for(;;){

System.out.print("请输入椭圆长半轴长:

");

doubleaIn=sc3.nextDouble();

System.out.print("请输入椭圆短半轴长:

");

doublebIn=sc3.nextDouble();

if(aIn>0&&bIn>0)

{if(aIn>bIn){Ellipseellipse=newEllipse(aIn,bIn);

doublearea=ellipse.culArea(ellipse.getListData());

doublegirth=ellipse.culGirth(ellipse.getListData());

System.out.println("此椭圆形的面积为:

"+area+"\n此椭圆的周长为:

"+girth);

break;}

else

{System.err.println("输入错误,长半轴长度小于短半轴,请重新您输入!

");

}}

else

{System.err.println("输入错误,请输入大于0的数值!

");}}

}catch(Exceptione)

{System.err.println("输入错误,请重新输入!

");

option3();}}

else{//返回主菜单

menuStrip();}}

privatestaticStringreChoice()

{

Scannersc4=newScanner(System.in);

StringtempSelect;

for(;;){

System.out.println("是否要继续计算?

\n"+"[1]继续计算.[2]返回主菜单.\n"

+"请输入选择【1-2】:

");

tempSelect=sc4.next();

if(tempSelect.equals("1")||tempSelect.equals("2"))

{break;}

else{System.err.println("错误选项!

请重新选择!

");

//继续循环

}

}

returntempSelect;

}

}

 

运行结果如下:

三角形的计算

计算六边形:

 

计算椭圆形:

 

教师签字__________

 

第三部分结果与讨论(可加页)

1、实验结果分析(包括数据处理、影响因素讨论、综合分析和结论等)

本例中的测试类与之前做的银行账号中的测试类运用的思想相同。

实验中因为考虑各种形状计算面积和周长参数个数不同的问题,所以想的比较复杂,其实可以忽略这个问题,在接口Shape的方法中不定义参数,在三角形类,椭圆形类以及六边形类中可以直接使用类中的实例变量进行计算,这样在实现计算的同时也可减小代码的复杂度。

因为三角形有多种计算方式,所以程序中对于不同的三角形,在创建实例的时候使用了不同的构造函数。

二、小结、建议及体会

虽然只是一个简单的程序设计题,但在做的过程中要尽量考虑现实中的情况,考虑多种输入可能,考虑各种可能存在的找错(比如输入的不是数值、或输入的数值小于0、或输入的三条边不能构成三角形等等)。

 

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

当前位置:首页 > 医药卫生 > 基础医学

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

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