武汉理工Java实验报告二Word文档格式.docx
《武汉理工Java实验报告二Word文档格式.docx》由会员分享,可在线阅读,更多相关《武汉理工Java实验报告二Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
一、实验内容描述(问题域描述)
1.编写一个抽象的二维几何体接口Geometricinterface,其中定义求周长和求面积方法,再编写三角形类其实现Geometricinterface接口,有三个边长属性,编写矩形类继承Geometricinterface接口,有长和宽属性。
要求输入相关属性值后,可以求得相应的周长值和面积值。
附:
求三角形面积
其中a,b,c分别为三角形三边长,p为半周长,S为三角形的面积。
2.使用面向对象的思想编写计算器,改进第一次试验的第4题,实现加、减、乘、除操作。
其中包括一个运算抽象类Operation和各个运算的实现。
要求:
(1)使用封装;
(2)使用继承;
(3)使用多态。
(4)实现表达式的加、减、乘、除运算。
计算:
“3+(5*6-4)”
实现思路:
1)创建抽象类Operation及其子运算类;
2)利用数据结构堆栈的思想,解析表达式;
(选做,如果不能实现可以定义成员变量运算数1(numA)和运算数2(numB))
3)编写测试类TestCalc进行验证。
二、实验内容与设计思想
1./*几何*/
(1)/*三角形类*/
publicclassTriangleimplementsGeomInterface
{
doublea,b,c;
//构造方法
Triangle(intx,inty,intz)
{
a=x;
b=y;
c=z;
}
//求周长
publicvoidperimeter()
System.out.println("
三角形的周长为"
+(a+b+c));
//求面积
publicvoidarea()
doublep=(a+b+c)/2;
doubleS;
S=Math.sqrt(p*(p-a)*(p-b)*(p-c));
三角形的面积为"
+S);
(2)长方形类类似三角形类,略。
(3)/*接口*/
interfaceGeomInterface{
voidperimeter();
voidarea();
}
(4)/*主函数*/
publicclassmian{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Squares=newSquare(4,5);
Trianglet=newTriangle(3,4,5);
s.perimeter();
s.area();
t.perimeter();
t.area();
2.计算器
(1)importjava.util.Scanner;
classoperator{
privatecharch;
operatorlast;
operatornext;
publicvoidsetCh(charx){
ch=x;
publicchargetCh(){
returnch;
abstractclassOperation{
doublenum1,num2,result;
abstractdoublegetResult();
classOperationaddextendsOperation{
publicOperationadd(doublea,doubleb){
//TODOAuto-generatedconstructorstub
num1=a;
num2=b;
doublegetResult(){
returnnum1+num2;
classOperationsubextendsOperation{
publicOperationsub(doublea,doubleb){
returnnum1-num2;
classOperationmulextendsOperation{
publicOperationmul(doublea,doubleb){
returnnum1*num2;
classOperationdivextendsOperation{
publicOperationdiv(doublea,doubleb){
returnnum1/num2;
publicclassDemo2{
staticintjudge(charch1,charch2){
if(ch1=='
+'
){
switch(ch2){
case'
:
return-1;
…
default:
break;
}
}
-'
*'
…
/'
('
if(ch2=='
)'
return2;
}else{
return1;
}
return0;
#'
return0;
请输入一个以#结尾的表达式:
"
);
Scannerscanner=newScanner(System.in);
Stringstr=scanner.next();
if(str.charAt(str.length()-1)!
=35){
System.out.println("
输入错误!
return;
intflag1=0,flag2=0,flag3=0;
numbernum1=null,num2=null;
numberfirstnum=newnumber();
firstnum.setA(0);
operatorfirstoperator=newoperator();
firstoperator.setCh('
operatorop1=firstoperator,op2=null;
for(inti=0;
i<
str.length();
i++){
charch=str.charAt(i);
if(ch<
58&
&
ch>
47){
if(flag2==0){
if(firstnum.getA()==0){
firstnum.setA(ch-48);
num1=firstnum;
flag2=1;
}else{
num2=newnumber();
num2.setA(ch-48);
num2.setA(num2.getA()*10+(ch-48));
}
flag2=0;
op2=newoperator();
op2.setCh(ch);
flag1=judge(op1.getCh(),op2.getCh());
switch(flag1){
case-1:
switch(op1.getCh()){
case'
num1.setA(newOperationadd(num1.getA(),num2.getA()).getResult());
op2=null;
num2=null;
op1=op1.last;
i--;
break;
num1.setA(newOperationsub(num1.getA(),num2.getA()).getResult());
op1.setCh(ch);
op1=op1.last;
i--;
num1.setA(newOperationmul(num1.getA(),num2.getA()).getResult());
num1.setA(newOperationdiv(num1.getA(),num2.getA()).getResult());
}
break;
case1:
{
op1.next=op2;
op2.last=op1;
op1=op2;
if(num2!
=null){
num1.next=num2;
num2.last=num1;
num1=num2;
}
case2:
...
case0:
…
case-2:
}
(2)/*number*/
package
java实验2;
class
number{
private
double
a;
number
last;
next;
public
void
setA(double
x){
a=x;
getA()
return
operator{
char
ch;
operator
setCh(char
ch=x;
getCh()
三、实验使用环境:
EclipseJAVAOxygen
第二部分:
实验调试与结果分析(可加页)
一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)
1.
2.
二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)
1.程序运行成功,达到实验要求。
2.实验现象正常。
3.第二个实验难度较高,多次调试才正确运行。
三、实验小结、建议及体会
这次实验第二个题目实现较为复杂,写得时候思路不清晰,越写越混乱,以至于多次全部推翻重写,浪费了大量时间。
在写较复杂的程序时,先理清思路,找对数学方法显得至关重要。