武汉理工Java试验报告二Word文件下载.docx
《武汉理工Java试验报告二Word文件下载.docx》由会员分享,可在线阅读,更多相关《武汉理工Java试验报告二Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
组别
同组者
实验日期
2017年
10月2
日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
1.编写一个抽象的二维几何体接口
Geometricinteface,其中定义求周长和求面积方法,再编写三角形类其实现
Geometricinteface接口,有三个边长属性,编写矩形类继承Geometricinterface接口,有长和宽属性。
要求输入相关属性值后,可以求得相应的周长值和面积值。
附:
求三角形面积
1
s二如9一如一怖一4
L
其中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)/*三角形类*/
publicclassTriangleimplementsGeomlnterface{
doublea,b,c;
〃构造方法
Triangle(intx,inty,intz)
{
a=x;
b=y;
cf;
}
〃求周长
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)/*接口*/
interfaceGeomlnterface{
voidperimeter。
;
voidarea();
(4)/*主函数*/
publicclassmian{
^publ^^stat^jvoidmain(Strin^^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-generatedconstructorstubnum1=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;
-'
){switch(ch2){
*'
/'
('
if(ch2=='
)'
){return2;
}else{
return1;
if(ch仁='
){return0;
#'
return0;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
请输入一个以#结尾的表达式:
);
^^Scannerscanner=newScanner(System.in);
Stringstr=scanner.next();
if(str.charAt(str」ength()-1)!
=35){
输入错误!
);
—return;
intflag仁0,flag2=0,flag3=0;
numbernum仁nuII,num2=nuII;
numberfirstnum=newnumber();
firstnum.setA(O);
operatorfirstoperator=newoperator。
;
firstoperator.setCh(#);
operatorop1=firstoperator,op2=nuII;
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);
num仁firstnum;
flag2=1;
num2=newnumber();
num2.setA(ch-48);
flag2=1;
num2.setA(num2.getA()*10+(ch-48));
}else{flag2=0;
op2=newoperator。
op2.setCh(ch);
flag仁judge(op1.getCh(),op2.getCh());
switch(flag1){
case-1:
switch(op1.getCh()){case'
num1.setA(new
Operationadd(num1.getA(),num2.getA()).getResult());
op2=null;
num2=null;
op1=op1」ast;
i--;
break;
numl.setA(new
Operationsub(num1.getA(),num2.getA()).getResult());
opl.setCh(ch);
num2=null;
}case'
{num1.setA(new
Operationmul(num1.getA(),num2.getA()).getResult());
op1.setCh(ch);
Operationdiv(num1.getA(),num2.getA()).getResult());
}break;
}case1:
{op1.next=op2;
op2」ast=op1;
op1=op2;
if(num2!
=null){num1.next=num2;
num2」ast=num1;
num1=num2;
case2:
■■■
case0:
case-2:
(2)/*number*/packagejava实验2;
classnumber{privatedoublea;
numberlast;
numbernext;
publicvoidsetA(doublex){a=x;
publicdoublegetA(){returna;
class