武汉理工Java实验报告二.docx
- 文档编号:5575949
- 上传时间:2022-12-28
- 格式:DOCX
- 页数:13
- 大小:29.38KB
武汉理工Java实验报告二.docx
《武汉理工Java实验报告二.docx》由会员分享,可在线阅读,更多相关《武汉理工Java实验报告二.docx(13页珍藏版)》请在冰豆网上搜索。
武汉理工Java实验报告二
武汉理工Java实验报告
(二)
学生学号
实验课成绩
武汉理工大学
学生实验报告书
课程名称JAVA语言程序设计
开课学院计算机科学与技术学院
指导老师
学生姓名
专业班级
2017—2018学年第一学期
实验课程名称:
JAVA语言程序设计
实验项目名称
类和对象
实验成绩
实验者
专业班级
组别
同组者
实验日期
2017年10月2日
第一部分:
实验分析与设计(可加页)
一、实验内容描述(问题域描述)
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));
System.out.println("三角形的面积为"+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){
//TODOAuto-generatedconstructorstub
num1=a;num2=b;
}
doublegetResult(){
returnnum1-num2;
}
}
classOperationmulextendsOperation{
publicOperationmul(doublea,doubleb){
//TODOAuto-generatedconstructorstub
num1=a;num2=b;
}
doublegetResult(){
returnnum1*num2;
}
}
classOperationdivextendsOperation{
publicOperationdiv(doublea,doubleb){
//TODOAuto-generatedconstructorstub
num1=a;num2=b;
}
doublegetResult(){
returnnum1/num2;
}
}
publicclassDemo2{
staticintjudge(charch1,charch2){
if(ch1=='+'){
switch(ch2){
case'+':
return-1;
…
default:
break;
}
}
if(ch1=='-'){
switch(ch2){
…
}
if(ch1=='*'){
switch(ch2){
…
}
}
if(ch1=='/'){
switch(ch2){
…
}
}
if(ch1=='('){
if(ch2==')'){
return2;
}else{
return1;
}
}
if(ch1==')'){
return0;
}
if(ch1=='#'){
switch(ch2){
…
}
}
return0;
}
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
System.out.println("请输入一个以#结尾的表达式:
");
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 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); flag2=1;} }else{ num2.setA(num2.getA()*10+(ch-48)); flag2=1; } }else{ 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;} case'-': { num1.setA(newOperationsub(num1.getA(),num2.getA()).getResult()); op1.setCh(ch); op2=null; num2=null; op1=op1.last; i--; break;} case'*': { num1.setA(newOperationmul(num1.getA(),num2.getA()).getResult()); op1.setCh(ch); op2=null; num2=null; op1=op1.last; i--; break;} case'/': { num1.setA(newOperationdiv(num1.getA(),num2.getA()).getResult()); op1.setCh(ch); op2=null; num2=null; op1=op1.last; i--; break; } } break; } case1: { op1.next=op2; op2.last=op1; op1=op2; if(num2! =null){ num1.next=num2; num2.last=num1; num1=num2; } break; } case2: { ... break; } case0: { … break; } case-2: { … break; } } } } } (2)/*number*/ package java实验2; class number{ private double a; number last; number next; public void setA(double x){ a=x; } public double getA() { return a; } } class operator{ private char ch; operator last; operator next; public void setCh(char x){ ch=x; } public char getCh() { return ch; } } 三、实验使用环境: EclipseJAVAOxygen 第二部分: 实验调试与结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 1. 2. 二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 1.程序运行成功,达到实验要求。 2.实验现象正常。 3.第二个实验难度较高,多次调试才正确运行。 三、实验小结、建议及体会 这次实验第二个题目实现较为复杂,写得时候思路不清晰,越写越混乱,以至于多次全部推翻重写,浪费了大量时间。 在写较复杂的程序时,先理清思路,找对数学方法显得至关重要。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工 Java 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)