您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 工作范文 > --类的设计与封装(一)实验报告
浙江大学城市学院实验报告课程名称面向对象程序设计实验项目名称类的设计与封装实验(一)学生姓名蓝礼巍专业班级学号一.实验目的和要求1.掌握使用类将对象的属性与功能封装在类中的特点2.掌握实例方法与构造方法二.实验内容1.分析Time类的设计2.分析并设计Product类3.分析并设计Fraction类4.设计Rectangle类5.设计Student类及其测试类School类三.实验结果与分析(可将程序运行结果截屏,也可分析运行结果)1.阅读以下关于Time类的代码,分析程序并回答相关的问题importjava.text.DecimalFormat;publicclassTime{privateinthour;privateintminute;privateintsecond;Time(){hour=0;minute=0;second=0;}Time(inth){hour=h;minute=0;second=0;}Time(inth,intm){hour=h;minute=m;second=0;}Time(inth,intm,ints){hour=h;minute=m;second=s;}Time(Timetime){this.hour=time.getHour();this.minute=time.getMinute();this.second=time.getSecond();}publicintgetHour(){returnhour;}publicintgetMinute(){returnminute;}publicintgetSecond(){returnsecond;}publicStringtoUniversalString(){DecimalFormattwoDigits=newDecimalFormat(00);returntwoDigits.format(getHour())+:+twoDigits.format(getMinute())+:+twoDigits.format(getSecond());}publicStringtoStandardString(){DecimalFormattwoDigits=newDecimalFormat(00);return((getHour()==12||getHour()==0)?12:getHour()%12)+:+、twoDigits.format(getMinute())+:+twoDigits.format(getSecond())+(getHour()12?AM:PM);}}(1)Time类共有几个构造器(即构造方法),作用有什么不同?5种Time(){hour=0;minute=0;second=0;}无参赛构造,初始化hour,minute,second;Time(inth){hour=h;minute=0;second=0;}定义h,令hour=h;Time(inth,intm){hour=h;minute=m;second=0;}定义h,m,令hour=h,mintue=m;Time(inth,intm,ints){hour=h;minute=m;second=s;}定义h,m,s;令hour=h,minute=m;second=sTime(Timetime){this.hour=time.getHour();this.minute=time.getMinute();this.second=time.getSecond();}给hour,mintue,second赋值(2)getTime(),getMinute(),getSecond()方法的作用是什么?如果去掉这些方法,程序可以完成同样的功能吗?如何修改?给hour,mintue,second赋值Time(Timetime){this.hour=hour;this,minute=minute;thi.second=second;}(3)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Timet1=newTime(5);System.out.println(Thetimeis+t1.toStandardString());Thetimeis5AM(4)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Timet2=newTime(13,59,60);System.out.println(Thetimeis+t2.toStandardString());Thetimeis1:59:60PM(5)如果以下代码段出现在Time类的测试程序的main方法中,输出结果是什么?Timet3=newTime(13,30,0);Timet4=newTime(t3);System.out.println(Thetimeis+t4.toUniversalString());Thetimeis1:30:00PM2.确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“~~~~~”标出错误的地方,并在第个练习的空白处写下正确的代码。如果代码中没有错误,则在答案中写上“没有错误”。注意:在每个程序段中可能包含多处错误。(1)以下代码定义了Product类,它有一个不带参数的构造器,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的Stringimportjava.text.*;publicclassProduct{privateStringname;privatedoubleprice;privatestaticDecimalFormatmoney=newDecimalFormat($0.00);publicProduct(){name=;price=0.00;}publicStringtoProductString(){returnname+costs+money.format(price);}}//endclassProduct答案:没有错误;(2)如下代码定义了Product类的另一个构造器,它有2个参数,并将这些参数赋给相应的实例变量publicProduct(Stringname,doubleprice){name=name;price=price;}答案:this.name=name;This.price=price;(3)如下代码定义了两个set方法,用于设置Product类的name和pricepublicsetName(){this.name=name;}publicsetPrice(){this.price=price;}答案:publicsetName(){returnname;}publicsetPrice(){returnprice;}(4)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,并显示一个包含对象的实例变量值的StringProductp1=newProduct(Milk,5.5);System.out.println(p1.name++p1.price);Milk5.5(5)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,设置其实例变量的值,并显示一个包含实例变量值的StringProductp1=newProduct();p1.setName();p1.setPrice();System.out.println(p1.toProductString(Eggs,3));答案:Eggscosts33.补充以下代码,完成对一个分数类Fraction的定义,并测试这个类publicclassFraction{privateintnume;//分子privateintdeno;//分母//无参构造器publicFraction(){//初始化实例变量nume=5;deno=6;}//有参构造器publicFraction(intn,intd){//初始化实例变量nume=n;deno=d;}//化简分数方法voidswap(int&a,int&b){intc=a;a=b;b=c;}intgcd(inta,intb){if(0==a){returnb;}if(0==b){returna;}if(ab){swap(a,b);}intc;for(c=a%b;c0;c=a%b){a=b;b=c;}returnb;}voidFracSimp(){//求分数的分子和分母的最大公约数//化简分数Inta=gcd(numedeno);nume=nume/a;deno=deno/a;}/*欧几里德算法定理:gcd(a,b)=gcd(b,amodb),以下是c语言的代码,可以参考voidswap(int&a,int&b){intc=a;a=b;b=c;}intgcd(inta,intb){if(0==a){returnb;}if(0==b){returna;}if(ab){swap(a,b);}intc;for(c=a%b;c0;c=a%b){a=b;b=c;}returnb;}*///分数输出方法voidFracOutput(){//输出分数的分子和分母If(nume==0)Println(“除数不能为0”);ElsePrintln(nume+”/”+demo);}publicstaticvoidmain(Stringargs[]){//定义第1个Fraction类的对象引用f1,调用无参构造方法//定义第2个Fraction类的对象引用f2,调用有参构造方法//调用化简分数方法//调用分数输出方法Fractionf1=newFraction();Fractionf2=newFaction(5,10);f2.FracSimp();f2.FracOutput();}4.构造一个Rectangle类(矩形类),它有两个浮点型属性length(长)和width(宽)。该类具有两个构造函数(无参和有参),perimeter()和area()方法分别返回矩形的周长和面积,编写相应的main方法测试Rectangle类。程序结构如下:publicclassRectangel{//实例变量的声明//构造器的定义//perimeter方法定义//area方法定义publicstaticvoidmain(String[]args){//定义Rectangle类的对象引用r//调用perimeter方法,并显示周长//调用area方法,并显示面积}}publicclassRectangel{doublelength;doublewidth;Rectangel(){length=3;length=4;}Rectangel(doublelength,doublewidth){this.length=length;this.width=width;}doubleperimeter(){return(length+width)*2;}doublearea(){returnlength*width;}publicstaticvoidmain(String[]args){Rectangelr1=newRectangel();Rectangelr2=newRectangel(8,2);System.out.println(周长为+r2.perimeter());System.out.println(面积为+r2.area());}}5.设计一个学生类Student,程序框架如下:publicclassStudent{//设计一个类变量(静态变量)记录学生人数private//设计基本属性有“学号”、“班号”、“姓名”、“性别”、“年龄”、“成绩”(用数组表示6门课的成绩)private//设计构造器,传递学生的个人信息publicStudent(){}/
本文标题:--类的设计与封装(一)实验报告
链接地址:https://www.777doc.com/doc-3115994 .html