类的设计与封装一实验报告.docx
- 文档编号:23512304
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:13
- 大小:50.52KB
类的设计与封装一实验报告.docx
《类的设计与封装一实验报告.docx》由会员分享,可在线阅读,更多相关《类的设计与封装一实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
类的设计与封装一实验报告
浙江大学城市学院实验报告
课程名称面向对象程序设计
实验项目名称类的设计与封装实验
(一)
学生姓名蓝礼巍专业班级学号
一.实验目的和要求
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=s
Time(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:
00PM
2.确定以下代码段中是否存在错误,如果有错误,指出是逻辑错误还是语法错误,请在程序中用“~~~~~”标出错误的地方,并在第个练习的空白处写下正确的代码。
如果代码中没有错误,则在答案中写上“没有错误”。
注意:
在每个程序段中可能包含多处错误。
(1)以下代码定义了Product类,它有一个不带参数的构造器,将产品的名称设置为一个空的String,将price设置为0.00;该类还有一个toProductString方法,它返回一个包含产品的name和price的String
importjava.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和price
publicsetName(){
this.name=name;
}
publicsetPrice(){
this.price=price;
}
答案:
publicsetName(){
returnname;
}
publicsetPrice(){
returnprice;
}
(4)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,并显示一个包含对象的实例变量值的String
Productp1=newProduct("Milk",5.5);
System.out.println(p1.name+""+p1.price);
Milk5.5
(5)如下代码位于测试Product类的应用程序的main方法中,创建一个Product对象,设置其实例变量的值,并显示一个包含实例变量值的String
Productp1=newProduct();
p1.setName();
p1.setPrice();
System.out.println(p1.toProductString("Eggs",3));
答案:
Eggscosts3
3.补充以下代码,完成对一个分数类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(a>b) { swap(a,b); }
intc;
for(c=a%b;c>0 ;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(a>b) { swap(a,b); }
intc;
for(c=a%b;c>0 ;c=a%b) { a=b; b=c; }
returnb;
}*/
//分数输出方法
voidFracOutput(){
//输出分数的分子和分母
If(nume==0)
Println(“除数不能为0”);
Else
Println(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(){
}
//设计方法“获得学号”、“获得班号”、“获得姓名”、“获得成绩”
//设计方法“修改年龄”、“修改班号”
//设计类方法“获得学生人数”
}
returncn;
}
publicStringgetName(){
returnname;
}
publicint[]getScore(){
returnscore;
}
publicvoidsetAge(intage){
this.age=age;
}
publicvoidsetcn(intcn){
=cn;
}
publicintgetSn(){
returnsn;
}
}
//设计一个类School,用于测试以上Student类
publicclassSchool{
publicstaticvoidmain(String[]args){
//创建新学生对象
//输出学生的基本信息
//测试类变量值的变化
}
}
publicclassSchool{
publicstaticvoidmain(String[]args){
intk[]={99,99,99,99,99,99};
Students=newStudent(1,1,1,"蓝礼巍","男",20,k);
intm[]=s.getScore();
System.out.println("班级为:
"+s.getCn+"\n姓名为:
"+s.getName());
System.out.println("学生成绩为:
");
for(inti=0;i System.out.println(m[i]); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计 封装 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)