计科三班19号廖彬彬多做的实验报告.docx
- 文档编号:26643200
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:36
- 大小:385.55KB
计科三班19号廖彬彬多做的实验报告.docx
《计科三班19号廖彬彬多做的实验报告.docx》由会员分享,可在线阅读,更多相关《计科三班19号廖彬彬多做的实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
计科三班19号廖彬彬多做的实验报告
计科三班19号廖彬彬多做的实验报告
多做的一次实验报告希望学长加分。
。
。
。
。
实验10:
面向对象编程基础
(一)简单的类和对象
实验目的:
1.掌握类的定义,熟悉属性、构造函数、方法的作用,掌握用类作为类型声明变量和方法返回值;
2.理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实例的方法和属性;
实验数据记录及分析(或程序及运行结果)
1.写一个名为Rectangle的类表示矩形。
其属性包括宽width、高height和颜色color,width和height都是double型的,而color则是String类型的。
要求该类具有:
(1)使用构造函数完成各属性的初始赋值
(2)使用getter和setter的形式完成属性的访问及修改
(3)提供计算面积的getArea()方法
publicclassrec{
publicdoublewidth;
publicdoubleheight;
publicStringcolor;
publicdoublesetwidth(doublew){
width=w;
}
publicdoublesetheight(doubleh){
height=h;
}
publicdoublegetwidth(){
returnwidth;
}
publicdoublegetheight(){
returnheight;
}
publicdoublegetArea(){
returnheight*width;
}
publicrec(){};
publicrec(doublewid,doublehei){
width=wid;
height=hei;
}
}
2.一副牌Deck有52张扑克Card组成(不含王牌),每张牌有自己的牌型suit(用char类型)和点数rank(用String类型),补充完整下面的类的定义。
已补充:
publicclassCard{
publiccharsuit;
publicStringrank;
publicCard(charh,Stringranks){
this.suit=h;
this.rank=ranks;
}
publicStringtoString(){
returnsuit+rank;
}
publicvoiddisplay(){
System.out.println(this.toString());
}
publicstaticvoidmain(Stringargs[]){
Cardd=newCard('H',"2");
d.display();
}
}
------------------------
publicclassDeck{
staticfinalcharsuits[]={'H','S','D','C'};
staticfinalStringranks[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
staticCard[]cards=newCard[52];
/**
*初始化扑克牌数组
*/
publicstaticvoidinit(){
for(inti=0;i for(intj=0;j cards[i*ranks.length+j]=newCard(suits[i],ranks[j]); } } } } 3.银行的账户记录Account有账户的唯一性标识(11个长度的字符和数字的组合),用户的姓名,开户日期(Date),账户密码(六位的数字,可以用0开头),当前的余额。 银行规定新开一个账户时,银行方面提供一个标识符、账户初始密码123456,客户提供姓名,开户时客户可以直接存入一笔初始账户金额,不提供时初始余额为0。 定义该类,并要求该类提供如下方法: 存款、取款、变更密码、可以分别查询账户的标识、姓名、开户日期、当前余额等信息。 程序代码: importjava.io.*;//加载java.io类库里的所有类 publicclassAccount{ publicStringuser; publicStringname; publicStringDate; publiclongpsd; publicdoublemoney; publicvoiddisplay(){ System.out.println("客户信息: "); System.out.println("客户帐号标识: "+user); System.out.println("姓名: "+name); System.out.println("开户日期: "+Date); System.out.println("当前余额: "+money); } publicvoidcun(doublec){//存款 this.money=this.money+c; System.out.println("已存款"+c+"元"); System.out.println("当前余额"+this.money+"元"); } publicvoidqu(doubleq){//取款 if(q>this.money){ //TODOAuto-generatedcatchblock e.printStackTrace(); } A.qu(12000.0); A.qu(200.0); A.cun(1000.0); } } 程序运行结果: 4.一个Fan有自己的品牌和型号,其调速旋钮speed可以调整Fan的速度(档级在0、1、2、3范围内),通电开关可以改变电扇状态(通电表示工作就绪或者工作,断电表示停止工作)请仔细分析并提供Fan类的定义。 并编写程序对其进行测试。 具体要求如下: (1)表示该类对象的状态可以用品牌(brand,可以用字符串型表示,因为品牌通常都是多个字符组成的)、工作状态(status,用来反映一个电风扇是否处于通电就绪ready、正在转动working或者静止stop)、当前的速度(speed,可以用数值型表示); (2)用构造函数可以创建一个电风扇对象,指定其品牌就可以了,一个电风扇的初始状态可以是静止,而且初始速度为0,分析为什么不适宜直接通过构造函数的形式参数来指定初始状态和速度; (3)给该类提供如下的方法,重点考虑每个动作导致的状态变化,形成代码逻辑; ●提供一个方法来表示电风扇的开与关,模拟一个开关动作 ●通过加速和减速两个方法来调整速度,当速度超出极限(0或3),向控制台输出一条告警信息作为提示,并且不执行该调速动作。 ●提供一个方法能够返回电风扇当前的状态和速度 (4)添加一个main方法,按顺序完成以下工作,考虑状态与速度变化和开关动作之间的关系: ●创建一个电风扇对象,用f表示; ●加速一次电风扇; ●向控制台输出f的状态和速度; ●启动电风扇(调用对象的开关方法); ●向控制台输出f的状态和速度; ●连续加速4次(考虑发生什么情况); ●向控制台输出f的状态和速度; ●连续减速4次(考虑发生什么情况); ●向控制台输出f的状态和速度; ●关掉电风扇(调用对象的开关方法); ●连续加速2次 ●向控制台输出f的状态和速度; 代码: publicclassfan{ publicbooleanOpen; publicStringbrand; publicintspeed; intstate; publicfan(){}; publicfan(Stringb){ this.brand=b; this.speed=0; this.state=0; } publicvoidon(){//启动 this.Open=true; this.state=1; System.out.println("已开启"); } publicvoidoff(){//关闭 this.speed=0; this.Open=false; this.state=2; System.out.println("已关闭"); } publicvoidspeedup(){ this.state=1; if(this.speed>2){ System.out.println("超速! "); return; }; this.speed++; } publicvoidspeeddown(){ if(this.speed<1){ System.out.println("已经为最低! ! "); return; }; this.speed--; } publicvoiddisplay(){ System.out.println("当前速度为: "+this.speed); switch(this.state){ case0: System.out.println("当前状态为: ready");break; case1: System.out.println("当前状态为: working");break; case2: System.out.println("当前状态为: stop");break; default: System.out.println("无法获知状态."); } } publicstaticvoidmain(Stringargs[]){ fanF=newfan("f"); F.speedup(); F.display(); F.on(); F.display(); for(ints=0;s<4;s++){ F.speedup(); } F.display(); for(intd=0;d<4;d++){ F.speeddown(); } F.display(); F.off(); F.speedup(); F.speedup(); F.display(); } } 运行结果: 5.解释下面的程序运行结果输出为什么是null publicclassMy{ Strings; publicvoidMy(){ s="Constructor"; } publicvoidgo(){ System.out.println(s); } publicstaticvoidmain(Stringargs[]){ Mym=newMy(); m.go(); } } 没有调用My函数,应该去掉void,即将My方法改为构造方法就可以了。 6.给出下面的类,找出后面的5个声明中,哪些是重载后的构造函数 publicclassConstOver{ publicConstOver(intx,inty,intz){ } } A.ConstOver(){} B.ProtectedintConstOver(){} C.PrivateConstOver(intz,inty,bytex){} D.PublicObjectConstOver(intx,inty,intz){} E.PublicvoidConstOver(bytex,bytey,bytez){} 答案: E; 7.给出下面的类,找出后面的5个声明中,哪些是重载后的setVar函数 publicclassMethodOver{ publicvoidsetVar(inta,intb,floatc){ } } A.PrivatevoidsetVar(inta,floatc,intb){} B.ProtectedvoidsetVar(inta,intb,floatc){} C.PublicintsetVar(inta,floatc,intb){returna;} D.PublicintsetVar(inta,intb,floatc){returna;} E.ProtectedfloatsetVar(inta,intb,floatc){returnc;} 答案: C 评语: 日期: 年月日 实验11: 面向对象编程基础 (二)方法中的参数传递 实验目的: 1.理解方法中的形参和实参传递在传递基本类型和引用类型时的差异 实验要求和过程 1.程序运行后的输出是什么? classTestReference{ publicstaticvoidmain(String[]args){ intx=2; TestReferencetr=newTestReference(); System.out.print(x); tr.change(x); System.out.print(x); } publicvoidchange(intnum){ num=num+1; } } 输出22 2.写出程序运行结果 publicclassFoo{ publicstaticvoidmain(String[]args){ StringBuffera=newStringBuffer(“A”); StringBufferb=newStringBuffer(“B”); operate(a,b);//调用了Foo类的一个类方法 System.out.printIn(a+“,”+b); } staticvoidoperate(StringBufferx,StringBuffery){ x.append(y); y=x; } } 输出AB,B 3.输入下面的类,结合实验十 (2)中的Card类,完成下面的要求 publicclassJLab1201{ staticfinalcharsuits[]={'H','S','D','C'}; staticfinalStringranks[]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; staticCard[]cards=newCard[52]; /** *初始化扑克牌数组 */ publicstaticvoidinit(){ for(inti=0;i for(intj=0;j cards[i*ranks.length+j]=newCard(suits[i],ranks[j]); } } } publicstaticvoidswap1(Cardc1,Cardc2){ Cardc=c1; c1=c2; c2=c; } publicstaticvoidswap1(inti,intj){ Cardc=cards[i]; cards[i]=cards[j]; cards[j]=c; } publicstaticvoidswap2(Cardc1,Cardc2){ chars=c1.suit; c1.suit=c2.suit; c2.suit=s; Stringr=c1.rank; c1.rank=c2.rank; c2.rank=r; } /** *@paramargs */ publicstaticvoidmain(finalString[]args){ init(); //任取两张牌 Cardc1=cards[10]; Cardc2=cards[12]; System.out.println("第11张牌是: "+c1+"\t第13张牌是: "+c2); } } 1)在main方法中,添加下面几行语句,写出并分析结果 swap1(c1,c2); System.out.println("执行swap1(c1,c2)后"); System.out.println("c1引用的牌是: "+c1+"\tc2引用的牌是: "+c2); System.out.println("第11张牌是: "+cards[10]+"\t第13张牌是: "+cards[12]); 结果: 多出几行: 执行swap1(c1,c2)后 c1引用的牌是: HJc2引用的牌是: HK 第11张牌是: HJ第13张牌是: HK 分析: 执行了swap1(Cardc1,Cardc2)函数,交换了c2,c1; 2)在main方法中,去掉刚才添加的语句,添加下面几行语句,写出并分析结果 swap1(10,12); System.out.println("执行swap1(10,12)后"); System.out.println("c1引用的牌是: "+c1+"\tc2引用的牌是: "+c2); System.out.println("第11张牌是: "+cards[10]+"\t第13张牌是: "+cards[12]); 结果: 多出几行: 执行swap1(10,12)后 c1引用的牌是: HJc2引用的牌是: HK 第11张牌是: HK第13张牌是: HJ 分析: 执行了swap1(inti,intj)函数,仍然是交换了两个类。 3)在main方法中,去掉刚才添加的语句,添加下面几行语句,写出并分析结果 swap2(c1,c2); System.out.println("执行swap2(c1,c2)后"); System.out.println("c1引用的牌是: "+c1+"\tc2引用的牌是: "+c2); System.out.println("第11张牌是: "+cards[10]+"\t第13张牌是: "+cards[12]); 结果: 多出几行: 执行swap2(c1,c2)后 c1引用的牌是: HKc2引用的牌是: HJ 第11张牌是: HK第13张牌是: HJ 分析: 执行了swap2(Cardc1,Cardc2)函数;交换了两个类的内容。 评语: 教师签字: 日期: 年月日 实验21: GUI程序设计 实验目的: 1.掌握GUI开发的基本过程 2.能够根据要求,选择合适的布局管理器和相应组件完成页面的布局 3.理解事件响应机制,掌握事件编程 4.了解MVC思想 实验数据记录及分析(或程序及运行结果) 1.准备两个相同大小的图像文件。 定义一个界面,放置一个带图标的按钮(图标使用准备的其中一个图像文件),当每次按下按钮时,按钮上的图标都会更换为另一个图像文件。 代码: importjava.awt.BorderLayout; importjava.awt.event.*; importjavax.swing.*; publicclassButtonTestextendsJFrameimplementsActionListener{ privateImageIconimage1=newImageIcon("p1.jpg"); privateImageIconimage2=newImageIcon("p2.jpg"); publicinttime=1; staticJButtonbutton1=newJButton(); publicButtonTest(){ this.add(button1,BorderLayout.NORTH); button1.setIcon(image1); button1.addActionListener(this); this.add(button1); this.setTitle("点击按钮,切换图标"); this.setSize(200,200); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } publicvoidactionPerformed(ActionEvente)//用鼠标拖动事件源的处理操作 { if(e.getSource()==button1)time++; if(time%2==0) {button1.setIcon(image2);} else {button1.setIcon(image1);} } publicstaticvoidmain(Stringargs[]){ newButtonTest(); } } 运行结果: 2.设计一个有九个格子的人机交互游戏,准备两张小图片,一张为鱼,一张为猫,你来控制猫在哪个格子出现,程序控制鱼在哪个格子出现,两个动物出现在一个格子里,游戏结束。 程序设计思路: 之前想的是画9个标签,把图像放到一个标签的不同位置,不过有点麻烦,没有做出来。 后来是利用上一题的思路,画9个按钮,用setIcon()函数使图片出现在按钮上面。 Switch()函数检测点击的按钮,和生成的随机数; 程序代码: importjava.awt.GridLayout; importjava.awt.event.ActionEvent; importjava.awt.event.ActionListener; importjava.util.Random; importjavax.swing.ImageIcon; importjavax.swing.JButton; importjavax.swing.JFrame; importjavax.swing.JOptionPane; importjavax.swing.JPanel; publicclassGUI_2extendsJFrame{ privateIma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三班 19 彬彬 实验 报告