




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
昆明理工大学信息工程与自动化学院学生实验报告( 20122013学年 第 一 学期 )课程名称:java程序设计 开课实验室:信自445 2012年 11月 21 日年级、专业、班计科11学号姓名苏东博,狄家帆,张盼成绩95实验项目名称Java面向对象程序设计指导教师张晓丽教师评语复习题仔细查看并掌握;编程题可参考书提供的源代码。 教师签名: 年 月 日一、实验目的及内容目的:掌握Java中面向对象的思想,类和对象的应用,可见性修饰符,数据域的封装,静态变量和方法,给方法传递对象参数。内容:完成下面要求的程序和习题(一)复习题1 课本P234第八章复习题8.12,给出正确的程序并显示结果,分析错误问题;2 课本P235第八章复习题8.16,显示并分析结果;3 课本P235第八章复习题8.17,显示并分析结果;4 课本P236第八章复习题8.18,显示并分析结果;5 课本P236第八章复习题8.19,显示并分析结果;6 课本P237第八章复习题8.20,给出正确的程序并显示结果,分析错误问题;(二)编程题1 课本P238第八章编程题8.4(使用Random类,参考jdk_7_docs.api,)注:通俗说,两者的区别是:带种子的,每次运行生成的结果都是一样的。 不带种子的,每次运行生成的都是随机的,没有规律可言。2 课本p23第八章编程练习题8.(账户类);注:月利率balance * (annualInterestRate / 12)3 课本p23第八章编程练习题8.(正边形)注:面积公式错误:p-PI;则JAVA编程公式:n*side*side/(4*Math.tan(Math.PI/n)访问器getter和修改器setter,在eclipse中可自动生成(eclipse中source菜单Generate getter and setter)4 完成并掌握每章课后复习题,上课提问检查;5 每章其他编程练习题;(选作)二、要求(编程题中给出实验内容的程序设计、实现和结果,并对结果进行分析。)(一) 复习题1. 课本P234第八章复习题8.12,给出正确的程序并显示结果,分析错误问题;分析:不能从静态方法中直接调用一个实例方法或引用实例变量,须实例化对象后,通过该对象调用实例方法或变量;但可以从一个实例方法中调用一个静态方法或引用一个静态变量。正确程序1:public class Foo public static void main(String args) method1();public static void method1()method2();public static void method2()System.out.println(What is radius+ c.getRadius();static Circle c=new Circle();class Circlestatic double radius;static double getRadius()radius=1;return radius;正确程序2:public class Be8_12 /*不能从静态方法中直接调用一个实例方法或引用实例变量, * 须实例化对象后,通过该对象调用实例方法或变量 *但可以从一个实例方法中调用一个静态方法或引用一个静态变量。*/public static void main(String args) new Be8_12().method1();public void method1()method2();public static void method2()Circle c=new Circle();/注须将Circle.java源程序放在同一包p8中,或import p8.Circle;且Circle 类中须有getRadius 方法:public double getRadius() return r;System.out.println(what is radius +c.getRadius();/new Be8_12().method1();/须实例化对象后,通过该对象调用实例方法或变量大多数错误程序 :public class Foo public static void main(String args) method1(); public static void method1()method2(); double radius;/错误:不在Circle类中如何能定义该构造函数。 Circle() radius=5.0; Circle (double newRadius) radius=newRadius; public static void method2()Circle c=new Circle(); System.out.println(what is radius +c.getRadius(); double getRadius() return radius; 结果显示:what is radius 1.0/注1.0由无参构造函数Circle()决定2.课本P235第八章复习题8.16,显示并分析结果;分析 :传递基本类型参数,传递的是实参的值,实参的值不会改变;传递引用类型参数,传递的是对象的引用,可以改变实参的值。程序:public class Test public static void main(String args) Count myCount=new Count();int times=0;for(int i=0;i100;i+)increment(myCount,times);System.out.println(count is +myCount.count);System.out.println(times is +times); public static void increment(Count c,int times) c.count+; times+; class Count public int count; public Count(int c) count=c;public Count()count=1; 结果显示:3.课本P235第八章复习题8.17,显示并分析结果;分析 :第三四行分别创建了半径为1和2的两个对象circle1和circle2; 然后分别调用swap1()和swap2()函数,并输出两个对象的半径; 在swap1()函数对地址值交换,但未影响对象,值未做交换; 在swap2()函数中两个对象的半径在内存里交换了,值成功交换;程序: public class Be8_17 public static void main(String args) Circle3 circle1 = new Circle3(1);Circle3 circle2 = new Circle3(2);swap1(circle1, circle2);System.out.println(After swap1: circle1= + circle1.radius+ circle2= + circle2.radius);swap2(circle1, circle2);System.out.println(After swap2: circle1= + circle1.radius+ circle2= + circle2.radius);public static void swap1(Circle3 x, Circle3 y) Circle3 temp = x;x = y;y = temp;public static void swap2(Circle3 x, Circle3 y) double temp = x.radius;x.radius = y.radius;y.radius = temp;class Circle3 double radius;Circle3(double newRadius) radius = newRadius; 结果显示:4.课本P236第八章复习题8.18,显示并分析结果;分析 :Swap方法实现了两个形参的交换,但是未能改变实参-数组元素的值。即在调用swap函数的时候把a0a1的值1,2传给了n1,n2在swap()函数中只调换了n1,n2的位置,但并没有调换a0和a1的值,所以输出结果仍然为a0=1,a1=2 程序: public class fuxitipublic static void main(String args) int a=1,2;swap(a0,a1);System.out.println(a0= +a0+ a1=+a1);public static void swap(int n1,int n2)int temp=n1;n1=n2;n2=temp;结果显示 Swap方法利用传递数组的方式来实现了两个数据的交换,Swap方法将a0a1做了交换public class fuxitipublic static void main(String args) int a=1,2;swap(a);System.out.println(a0=+a0+ a1=+a1);public static void swap(int a)int temp=a0;a0=a1;a1=temp;传递一个实例化对象到swap方法中,实现了e1,e2值的交换public class fuxitipublic static void main(String args) T t=new T();swap(t);System.out.println(e1=+t.e1+ e2=+t.e2);public static void swap(T t)int temp=t.e1;t.e1=t.e2;t.e2=temp;class Tint e1=1;int e2=2;结果显示:静态变量i将变量值存储在一个公共的内存地址,所以任何对象对此变量的值修改,都会使同一类的所有对象都受到影响。对象t1的实例化使i的值从0加到1,对象t2的实例化使i的值从1加到2,此时i的输出结果就是2.public class fuxitipublic static void main(String args) T t1=new T();T t2=new T();System.out.println(t1s i=+t1.i+ and j=+t1.j);System.out.println(t2s i=+t2.i+ and j=+t2.j);class Tstatic int i=0;int j=0;T()i+;j=1;结果显示: 5.课本P236第八章复习题8.19,显示并分析结果;A代码:import java.util.Date;public class Testpublic static void main(String args) Date date=null;m1(date);System.out.println(date);public static void m1(Date date)date=new Date();截图:结果分析:给对象date赋初值为null的,调用函数m1,只给形参(局部变量)赋值当前时间,可m1无返回值,对象date依然为null。B代码:import java.util.Date;public class Testpublic static void main(String args) Date date=new Date(1234567);m1(date);System.out.println(date.getTime();public static void m1(Date date)date=new Date(7654321);截图:结果分析:给对象date赋初值,调用函数m1,只给形参(局部变量)赋值,可m1无返回值,对象date依然为原值,所以还是原先实例的值。C代码:import java.util.Date;public class Testpublic static void main(String args) Date date=new Date(1234567);m1(date);System.out.println(date.getTime();public static void m1(Date date)date.setTime(7654321);截图:结果分析:给对象date赋初值,调用函数m1,后来利用date的修改器setTime来修改了date值为7654321。D代码:import java.util.Date;public class Testpublic static void main(String args) Date date=new Date(1234567);m1(date);System.out.println(date.getTime();public static void m1(Date date)date=null;截图:结果分析:给对象date赋初值,调用函数m1,只给形参(局部变量)赋null值,可m1无返回值,对象date依然为原值,所以还是原先实例的值。6.课本P237第八章复习题8.20,给出正确的程序并显示结果,分析错误问题;原出错程序public class BE8_20 public static void main(String args) java.util.Date dates = new java.util.Date10;/只给date数组分配了空间,未赋初值,均为Null。System.out.println(dates0);/date0为nullSystem.out.println(dates0.toString();/toString是把date对象的时间转换为字符串,遭遇空指针异常,提示NullPointerException.正确程序1:import java.util.Date;public class fuxitipublic static void main(String args) java.util.Date dates=new java.util.Date();/用普通变量代替数组,并赋初值System.out.println(dates);System.out.println(dates.toString();正确程序2:public class Test public static void main(String args) java.util.Date dates=new java.util.Date10;for(int i=0;i10;i+) datesi=new java.util.Date();/为数组的每个元素赋初值System.out.println(dates0);System.out.println(dates0.toString();结果显示: (二)编程题1.课本P238第八章编程题8.4(使用Random类,参考jdk_7_docs.api,)注:通俗说,两者的区别是:带种子的,每次运行生成的结果都是一样的。 不带种子的,每次运行生成的都是随机的,没有规律可言。(1) 程序:public class Random8_4 /* * E8-4使用随机类,种子1000 * 通俗说,两者的区别是:带种子的,每次运行生成的结果都是一样的。 * 不带种子的,每次运行生成的都是随机的,没有规律可言。 */public static void main(String args) Random rd = new Random(1000);for(int i=0;iPI;则JAVA编程公式:n*side*side/(4*Math.tan(Math.PI/n)访问器getter和修改器setter,在eclipse中可自动生成(eclipse中source菜单Generate getter and setter)(1)程序:public class RegularPolygon private int n=3;private double side=1;private double x=0,y=0;public int getN() return n;public void setN(int n) this.n = n;public double getSide() return side;public void setSide(double side) this.side = side;public double getX() return x;public void setX(double x) this.x = x;public double getY() return y;public void setY(double y) this.y = y; public static void main(String args) RegularPolygon one=new RegularPolygon();System.out.println(1.默认多边形为边长为 +one.side+的+one.n+边形+n 此多边形的周长为 :+one.getPerimeter()+n 此多边形的面积为 :+one.getArea();RegularPolygon two=new RegularPolygon(6,4);two.setN(6);two.setSide(4);System.out.println(2.此多边形是以(+two.x+,+two.y+)为中心点,边长为 +two.side+的+two.n+边形+n 此多边形的周长为 :+two.getPerimeter()+n 此多边形的面积为 :+two.getArea();RegularPolygon three=new RegularPolygon(10,4,5.6,7.8);three.setN(10);three.setSide(4);three.setX(5.6);three.setY(7.8);System.out.println(3.此多边形是以(+three.x+,+three.y+)为中心点,边长为 +three.side+的+three.n+边形+n 此多边形的周长为 :+three.getPerimeter()+n 此多边形的面积为 :+three.getArea();RegularPolygon()RegularPolygon(int n,double side)n=6;side=4;RegularPolygon(int n,double side,double x,double y)x=10;side=4;x=5.6;y=7.8;public double getPerimeter()return side*n;public double getArea()return n*side*side/(4*Math.tan(Math.PI/n);(2) 运行截图4. 完成并掌握每章课后复习题,上课提问检查复习题已做在课本上5. 每章其他编程练习题;(选作)程序 :public class choose1 public static void main(String args) Fan1 fan1 = new Fan1(); fan1.setSpeed(Fan1.FAST); fan1.setRadius(10); fan1.setColor(yellow); fan1.setOn(true); System.out.println(fan1.toString(); Fan1 fan2 = new Fan1(); fan2.setSpeed(Fan1.MEDIUM); fan2.setRadius(5); fan2.setColor(blue); fan2.setOn(false); System.out.println(fan2.toString(); class Fan1 public static int SLOW = 1; public static int MEDIUM = 2; public static int FAST = 3; private int speed = SLOW; private boolean on = false; private double radius = 5; private String color = white; public Fan1() public int getSpeed() return speed; public void setSpeed(int newSpeed) speed = newSpeed; public boolean isOn() return on; public void setOn(boolean trueOrFalse) this.on = trueOrFalse; public double getRadius() return radius; public void setRadius(double newRadius) radius = newRadius; public String getColor() return color; public void setColor(String newColor) color = newColor; public String toString() return 最大速度为 + speed + t + 颜色为 + color + t + 半径为 + radius + t + (on) ? 状态为打开 : 状态为关闭); 运行截图 :程序 :import java.util.Scanner;public class choose1 public static void main(String args) Scanner input = new Scanner(System.in); System.out.print(请输入一个方阵的长度 : ); int n = input.nextInt(); int board = new intnn; boolean isSameOnARow = false, isSameOnAColumn = false, isSameOnADiagonal = false, isSameOnASubdiagonal = false; for (int i = 0; i board.length; i+) for (int j = 0; j board0.length; j+) boardij = (int) (Math.random() * 2); System.out.print(boardij); System.out.println();for (int i = 0; i board.length; i+) boolean same = true; for (int j = 1; j board0.length; j+) if (boardi0 != boardij) same = false; break; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 票据考试题库及答案
- 网络等级考试题库及答案
- 影像技术考试题库及答案
- 保育员考试分析题及答案
- 医保管理部考试题及答案
- 闸东路小学招聘考试题及答案
- 兽医法规考试题库及答案
- 口腔药剂科考试题库及答案
- 药品购销员实操考试题及答案
- 2025年国家公务员考试试题库及答案解析
- 2025年茶粉行业研究报告及未来行业发展趋势预测
- 培训民警拍照宣传课件
- 2025一建《建设工程项目管理》冲刺361题
- 人教版二年级数学上册第二单元 1~6的表内乘法必刷卷 (含答案)
- 抖音账号实名认证承诺函模板
- 证券业反洗钱培训课件
- (2025年标准)以捐代购协议书
- GJB3165A-2020航空承力件用高温合金热轧和锻制棒材规范
- 颈部引流管的护理
- 2025至2030中国门诊外科中心行业项目调研及市场前景预测评估报告
- 退换货方案及措施
评论
0/150
提交评论