实验三Java类编程I.docx
- 文档编号:29255202
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:15
- 大小:100.40KB
实验三Java类编程I.docx
《实验三Java类编程I.docx》由会员分享,可在线阅读,更多相关《实验三Java类编程I.docx(15页珍藏版)》请在冰豆网上搜索。
实验三Java类编程I
§3Java类编程(I)
§3.1实验目的、容及性质
掌握类的定义,类的继承等基本概念。
实验性质:
验证、必做
实验学时:
2学时
§3.2问题及思考
1、什么是构造函数,如何调用?
2.类的构造方法名必须和类名相同吗?
3.什么是类属性访问器,为什么需要?
4.类的访问控制权有哪两种?
5.什么是包?
§3.3实验指导
1、OOP:
类的定义(属性与方法组成)
classStudent{
privateStringsno;/*属性变量*/
privateStringsname;
privateStringsdept;
/*定义Student类的一些方法*/
....
}
注意:
包的概念package:
(将多个类放在一起)。
类只有生成对象(实例化),通过对象调用对象方法
Students;/*声明一个,并未实例化*/
s=newStudent();/*实例化*/
Students2=newStudent();
2构造函数(形式,作用,如何调用)
1)与类同名,没有任何返回值void都不能写一般访问修饰符public
publicStudent(){
}
2)构造函数一般为了对对象属性赋初始值
publicStudent(Stringsno,Stringsname){
this.sno=sno;
this.sname=sname;
}
3)构造函数,当类实例化系统首先自动调用相应的构造函数.
Students1=newStudent();//调用无形式参数构造函数
Students2=newStudent(95002,"zhou");
//调用了形式参数为(String,String)构造函数
3属性set与get方法
/*设置属性的set与get方法*/
publicStringgetSno(){
returnsno;
}
publicvoidsetSno(Stringsno){
this.sno=sno;
}
publicStringgetSname(){
returnsname;
}
publicvoidsetSname(Stringsname){
this.sname=sname;
}
4、函数重载:
在一个类中,函数名称相同,但是形式参数的个数或形参类型不同,这样一组构成函数重载.
publicclassShape{
publicdoublearea(doubler){
returnMath.PI*r*r;
}
publicdoublearea(doublew,doubleh){
returnw*h;
}
publicdoublearea(doublea,doubleb,doublec){
doubles=(a+b+c)/2;
returnMath.Sqrt(s*(s-a)*(s-b)*(s-c));
}
}
§3.4实践编程
1、基本类定义:
编写一个类,描述学生的学号、、成绩。
学号用整型,成绩用浮点型,用String类型。
使用构造函数给这些属性赋值。
并编写一个成员函数显示学生信息。
编写一个测试类,生成该类的一个对象,显示该学生信息。
packageEx3_1;
publicclassStudent{
privateintsno;
privateStringsname;
privatefloatscore;
publicStudent(intsno,Stringsname,floatscore){
this.sno=sno;
this.sname=sname;
this.score=score;
}
publicStudent(){
}
publicStringtoString(){//output
returnsno+""+sname+""+score;
}
publicintgetSno(){
returnsno;
}
publicvoidsetSno(intsno){
this.sno=sno;
}
publicStringgetSname(){
returnsname;
}
publicvoidsetSname(Stringsname){
this.sname=sname;
}
publicfloatgetScore(){
returnscore;
}
publicvoidsetScore(floatscore){
this.score=score;
}
}
packageEx3_1;
publicclassTest{
publicstaticvoidmain(String[]args){
Students1=newStudent();
s1.setSno(20130001);
s1.setSname("hhk");
s1.setScore(90.0f);
Students2=newStudent(20130002,"xxx",60.0f);
Students3=s2;
System.out.println(s1.toString());
System.out.println(s3.toString());
}
}
2、设计一个描述二维平面上点的类Point,该类需要描述点的横坐标和纵坐标,并提供属性的set/get访问器方法和计算两点间距离的方法。
写一个程序测试这个类
packageEx3_2;
publicclassPoint{
privateintx,y;
privatedoubles;
publicPoint(){
}
publicPoint(intx,inty){
this.x=x;
this.y=y;
}
publicintgetX(){
returnx;
}
publicvoidsetX(intx){
this.x=x;
}
publicintgetY(){
returny;
}
publicvoidsetY(inty){
this.y=y;
}
publicStringtoString(){
return"("+x+","+y+")";
}
publicdoubledistance(Pointp1,Pointp2){
intx1=p1.getX();inty1=p1.getY();
intx2=p2.getX();inty2=p2.getY();
s=Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
returns;
}
}
packageEx3_2;
publicclassTest{
publicstaticvoidmain(String[]args){
Pointp1=newPoint(10,0);
Pointp2=newPoint(0,0);
doubles=p2.distance(p1,p2);
System.out.println(p1.toString());
System.out.println(p2.toString());
System.out.println(s);
}
}
3定义一个复数类,可以通过构造函数给复数对象赋值,实部和虚部是该类的私有属性,必须有获取和修改属性的方法,并定义它与复数、实数相加和相减及复数间乘的方法。
复数类Complex的属性:
realPart:
实部,代表复数的实数部分;
imaginPart:
虚部,代表复数的虚数部分;
复数类Complex的方法:
1)、Complex(doubler,doublei):
构造方法,创建复数对象的同时完成复数的实部、虚部的初始化,r为实部的初值,i为虚部的初值;
2)、getRealPart():
获得复数对象的实部;
3)、getImaginPart():
获得复数对象的虚部;
4)、setRealPart(doubled):
把当前复数对象的实部设置为给定的形式参数的数字;
5)、setImaginaryPart(doubled):
把当前复数对象的虚部设置为给定的形式参数的数字;
6)、complexAdd(Complexc):
当前复数对象与形式参数复数对象相加,所得的结果也是复数值,返回给此方法的调用者;
7)、complexMinus(Complexc):
当前复数对象与形式参数复数对象相减,所得的结果也是复数值;
8)、complexMulti(Complexc):
当前复数对象与形式参数复数对象相乘,所得的结果也是复数值;
编程实现这个类,并验证所编写的类能否正常使用。
packageEx3_3;
publicclassComplex{
privatedoubler;
privatedoublei;
publicComplex(){
}
publicComplex(doubler,doublei){
this.r=r;
this.i=i;
}
publicvoidsetRealPart(doubler){
this.r=r;
}
publicdoublegetRealPart(){
returnr;
}
publicvoidsetImaginaryPart(doublei){
this.i=i;
}
publicdoublegetImaginaryPart(){
returni;
}
publicComplexcomplexAdd(Complexc){
doubler1=this.r;doublei1=this.i;
doubler2=c.r;doublei2=c.i;
Complexc1=newComplex();
c1.setRealPart(r1+r2);c1.setImaginaryPart(i1+i2);
returnc1;
}
publicComplexcomplexMinus(Complexc){
doubler1=this.r;doublei1=this.i;
doubler2=c.r;doublei2=c.i;
Complexc1=newComplex();
c1.setRealPart(r1-r2);c1.setImaginaryPart(i1-i2);
returnc1;
}
publicComplexcomplexMulti(Complexc){
doubler1=this.r;doublei1=this.i;
doubler2=c.r;doublei2=c.i;
Complexc1=newComplex();
c1.setRealPart(r1*r2-i1*i2);c1.setImaginaryPart(r1*i2+i1*r2);
returnc1;
}
publicStringtoString(){
returnr+"+"+i+"i";
}
publicStringtoString1(){
return"("+r+"+"+i+"i)";
}
}
packageEx3_3;
publicclassTest{
publicstaticvoidmain(String[]args){
Complexc1=newComplex(4,3);
Complexc2=newComplex(6,2);
Complexc01=newComplex();
Complexc02=newComplex();
Complexc03=newComplex();
System.out.print(c1.toString()+"");
System.out.println(c2.toString());
c01=plexAdd(c2);
c02=plexMinus(c2);
c03=plexMulti(c2);
System.out.println(c1.toString1()+"+"+c2.toString1()+"="+c01.toString());
System.out.println(c1.toString1()+"-"+c2.toString1()+"="+c02.toString());
System.out.println(c1.toString1()+"*"+c2.toString1()+"="+c03.toString());
}
}
4、根据题目要求编写模拟洗牌的程序
请定义一个名为Card的扑克牌类,该类有两个private访问权限的字符串变量face和suit:
分别描述一牌的牌面值(如:
A、K、Q、J、10、9、…、3、2等)和花色(如:
“黑桃”、“红桃”、“梅花”和“方块”)。
定义Card类中的public访问权限的构造方法,为类中的变量赋值;定义protected访问权限的方法getFace(),得到扑克牌的牌面值;定义protected访问权限的方法getSuit(),得到扑克牌的花色;定义方法toString(),返回表示扑克牌的花色和牌面值字符串(如“红桃A”、“梅花10”等)。
【参考】
classCard{
privateStringface;
privateStringsuit;
publicCard(Stringf,Strings){
face=f;
suit=s;
}
protectedStringgetSuit(){
returnsuit;
}
protectedStringgetFace(){
returnface;
}
publicStringtoString(){
returnface+""+suit;
}
}
若应用程序的main方法中,定义字符串数组f和s:
分别表示扑克牌的牌面值和花色;定义52个元素的Card类型数组deck,用来存放4个花色的52牌。
如下所示。
【参考】
Stringf[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
Strings[]={"黑桃","红桃","梅花","方块"};
Carddeck=newCard[52];
1)、使用Card类的构造方法给deck数组的52牌赋值,要求数组中先存放黑桃花色的A、2、3、…、K;然后是红桃花色的A、2、3、…、K;梅花花色的A、2、3、…、K;方块花色的A、2、3、…、K。
请写出实现上述功能的程序段。
要求每个牌不重复,但52牌都有。
2)、请编写模拟洗牌的程序段,即把数组deck中的扑克牌随机打乱存放顺序。
【参考】可以使用随机函数每次交换两牌,可以交换多次。
要求输出四行,每行13牌
packageEx3_4;
publicclassCard{
privateStringface;
privateStringsuit;
publicCard(){
}
publicCard(Stringf,Strings){
face=f;
suit=s;
}
publicStringtoString(){
returnface+""+suit;
}
}
packageEx3_4;
publicclassTest{
//洗牌
publicstaticvoidwashcard(Card[]deck){
Cardt;inta,b;
for(intm=0;m<20;m++){
a=rand();b=rand();
t=deck[a];deck[a]=deck[b];deck[b]=t;
}
}
//随机数
publicstaticintrand(){
intt=(int)(Math.random()*52);
returnt;
}
//输出
publicstaticvoiddispArr(Card[]deck){
inta=0;
for(inti=0;i if(a! =0&&a%13==0) System.out.println(); a++; System.out.printf("%-6s",deck[i]); } } publicstaticvoidmain(String[]args){ String[]f={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; String[]s={"黑桃","红桃","梅花","方块"}; Card[]deck=newCard[52]; intn=0; for(inti=0;i for(intj=0;j Cardw=newCard(s[i],f[j]); deck[n]=w; n++; } } dispArr(deck); System.out.println(); System.out.println("Afterwash"); washcard(deck); dispArr(deck); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 Java 编程