Java 程序设计 类的高级应用
实验目的
1. 初步掌握面向对象编程中类的编写。
实验内容与要求
1. “自行车”、“小汽车”、“火车”都可以称之为“车”。请通过分析,抽象它们所共有的性质,定义一个抽象类Vehicle。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
2.编写一个Person类。该类包含三个成员变量name、weight和height,分别代表一个人的身高和体重。在该类中重写Object类的toString方法,当调用它重写的toString方法时,输出这个人的姓名、体重和身高。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
3.编写一个队列类Queue,用来存储float型数据,队列中的数据是先进先出的。具体要求如下:成员变量float [] elements用来存储float型数据;成员变量int size用来表示存储的float型数据的个数;构造方法Queue在初始化队列的时候,设置队列的容量为12;方法enqueue(float v)用来往队列中添加一个float型数据;方法dequeue()用从队列中删除并返回一个float型数据;方法getSize()用来返回队列的大小。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
4.编写一个秒表类StopWatch,成员变量和方法自定。编写一个支持快速排序算法的类QuickSort,成员变量和方法自定。对100000, 1000000, …等不同长度的数组中的元素(元素的值随机给定)进行排序,并用秒表对象来记录排序所用的时间。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
报告写作。要求:主要思路有明确的说明,重点代码有详细的注释,行文逻辑清晰可读性强,报告整体写作较为专业。(20分,这一项的评分,采用20分、10分和0分三个级别)
说明:
(1)本次实验课作业满分为100分,占总成绩的比例(待定)。
(2)本次实验课作业截至时间2019年10月24日(周四)23:59。
(3)报告正文:请在指定位置填写,本次实验不需要单独提交源程序文件。
(4)个人信息:WORD文件名中的“姓名”、“学号”,请改为你的姓名和学号;实验报告的首页,请准确填写“学院”、“专业”、“报告人”、“学号”、“班级”、“实验报告提交时间”等信息。
(5)提交方式:截至时间前,请在Blackboard平台中提交。
(6)发现抄袭(包括复制&粘贴整句话、整张图),该次作业记零分。
(7)延迟提交,不得分;如有特殊情况,请于截至日期之后48小时内发邮件到feiqiao@szu.edu.cn,并在邮件中注明课程名称、作业名称、姓名、学号等信息,以及特殊情况说明,我收到后会及时回复。
(8)期末考试阶段补交无效。
实验过程及结果
1.“自行车”、“小汽车”、“火车”都可以称之为“车”。请通过分析,抽象它们所共有的性质,定义一个抽象类Vehicle。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
程序代码如下:


运行结果如下:

2. 编写一个Person类。该类包含三个成员变量name、weight和height,分别代表一个人的身高和体重。在该类中重写Object类的toString方法,当调用它重写的toString方法时,输出这个人的姓名、体重和身高。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
程序代码如下:

运行结果如下:

3. 编写一个队列类Queue,用来存储float型数据,队列中的数据是先进先出的。具体要求如下:成员变量float [] elements用来存储float型数据;成员变量int size用来表示存储的float型数据的个数;构造方法Queue在初始化队列的时候,设置队列的容量为12;方法enqueue(float v)用来往队列中添加一个float型数据;方法dequeue()用从队列中删除并返回一个float型数据;方法getSize()用来返回队列的大小。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
程序代码如下:


运行结果如下:

4.编写一个秒表类StopWatch,成员变量和方法自定。编写一个支持快速排序算法的类QuickSort,成员变量和方法自定。对100000, 1000000, …等不同长度的数组中的元素(元素的值随机给定)进行排序,并用秒表对象来记录排序所用的时间。在报告中附上程序截图、运行结果截图和详细的文字说明。(20分)
程序代码如下所示:
秒表类:

快速排序方法:

生成随机数组的方法:

主方法:

结果如下(单位为毫秒):

若为1000000个数,stackoverflow

实验总结与体会
(写写感想、建议等)
- 对于第三题,由于java没有指针,无法创建动态链表;所以采用静态链表的时间复杂度
会更低。但由于静态链表较为复杂, 故此处采用顺序表, 为不浪费存储空间, 每次dequeue后将队列向左移动一位。
- Java无法将float按引用传递,所以dequeue返回类型为float,而dequeue无法检测队列
为空的状态。
3 .当函数里面的变量比较多的时候,JVM的栈空间很快就会被用完