实验目的
初步掌握面向对象编程中类的编写。
实验内容
一
运行第4章课件中第3页、第24页、第38页和第40页中的四个程序,并对每一行语句加上注释。在报告中附上程序截图、运行结果截图和简要的文字说明。
第4页中的程序:
程序截图:
运行结果截图:
简要文字说明:
该代码通过创建Circle类的对象,设置圆的半径并计算其面积,并将结果打印输出。
第24页中的程序:
程序截图:
运行结果截图:
简要文字说明:
代码演示了如何使用一个梯形类来创建梯形对象,设置梯形的属性,计算梯形的面积并输出结果。
第38页中的程序:
程序截图:
运行结果截图:
简要文字说明:
该代码展示了如何使用静态变量和实例变量来表示梯形的上底、下底和高度,并通过对象方法进行设置和获取。
第40页中的程序:
程序截图:
运行结果截图:
简要文字说明:
该代码展示了如何定义和使用实例常量和静态常量。实例常量需要通过对象实例访问,而静态常量可以直接通过类名访问。
二
编写一个Student类。类中包含以下成员变量:name(姓名)、stuID(学号)、class(班级)和course(主修的课程)。定义对应的方法对这几个成员变量的值进行设置和读取
(i)在Student类外的main方法里面,创建该类的一个对象,并调用各个方法,展示相应的效果。
程序截图:
运行结果截图:
简要文字说明:
这段代码编写了一个Student类。类中包含以下成员变量:name(姓名)、stuID(学号)、className(班级)和course(主修的课程)。设置了对这四个变量的设置和获取方法,并在Student类外的main方法里面,创建了该类的一个对象,并调用各个方法,展示了相应的效果。
(ii)在Student类内的main方法里面,创建该类的一个对象,并调用各个方法,展示相应的效果。在报告中附上程序截图、运行结果截图和简要的文字说明。
程序截图:
运行结果截图:
简要的文字说明:
这段代码编写了一个Student类。类中包含以下成员变量:name(姓名)、stuID(学号)、className(班级)和course(主修的课程)。设置了对这四个变量的设置和获取方法,并在Student类内的main方法里面,创建了该类的一个对象,并调用各个方法,展示了相应的效果。
三
编写一个队列类Queue,用来存储byte型数据,队列中的数据是先进先出的。具体要求如下:成员变量byte [] elements用来存储byte型数据;成员变量short size用来表示存储的byte型数据的个数;构造方法Queue在初始化队列的时候,设置队列的容量为16;方法enqueue(byte v)用来往队列中添加一个byte型数据;方法dequeue()用从队列中删除并返回一个byte型数据;方法getSize()用来返回队列的大小。在报告中附上程序截图、运行结果截图和详细的文字说明。
程序截图:
运行结果截图:
详细的文字说明:
Deque类具有三个成员变量,一个是存储byte类型的数组elements,一个是队列大小,一个是队列容量。成员变量byte [] elements用来存储byte型数据;成员变量short size用来表示存储的byte型数据的个数;成员变量capacity用来表示队列容量大小;构造方法Queue在初始化队列的时候,设置队列的容量为16;方法enqueue(byte v)用来往队列中添加一个byte型数据,当队列已满时,会报错;方法dequeue()用从队列中删除并返回一个byte型数据,当队列已空时,会报错;方法getSize()用于返回队列元素的个数;方法print()用于打印队列的元素。
Test类用于测试 Deque 类的功能。先创建一个 Random 对象用于生成随机数,然后创建一个 Deque 对象 deque,接着使用循环将随机生成的 16 个随机字节添加到队列中,填满队列,然后调用 deque.print() 方法打印队列中的元素,接着尝试再次调用 deque.enqueue() 方法添加一个元素,由于队列已满,会打印错误消息,然后调用两次 deque.dequeue() 方法从队列头部移除两个元素,接着再次调用 deque.print() 方法打印删除两个元素后的队列情况,然后调用两次 deque.enqueue() 方法向队列尾部添加两个元素,接着再次调用 deque.print() 方法打印更新后的队列情况,然后使用循环将队列中的剩余 16 个元素全部移除,清空队列,接着调用 deque.print() 方法打印清空后的队列情况,最后尝试调用 deque.dequeue() 方法移除元素,由于队列已空,会打印错误消息。
四
编写一个复数类Complex:成员变量包括realPart和imagePart,分别代表实数部分和虚数部分;构造方法Complex()用于将实数部分和虚数部分都置为0;构造方法Complex(int r, int i)用于将实数部分置为r、虚数部分置为i;方法Complex complexMULTIPLE(Complex c)将当前复数对象与形参复数对象相乘,注意 (a+bj)*(c+dj)=ac-bd+(ad+bc)j;String toString()把当前复数对象的实数部分和虚数部分组合成a+bj的字符串形式。在报告中附上程序截图、运行结果截图(要求输出复数3+5i和复数2+3j相乘的结果)和详细的文字说明。
程序截图:
运行结果截图:
简要的文字说明:
这段代码实现了一个复数类Complex:成员变量包括realPart和imagePart,分别代表实数部分和虚数部分;构造方法Complex()用于将实数部分和虚数部分都置为0;构造方法Complex(int r, int i) 用于将实数部分置为r、虚数部分置为i;方法Complex complexMULTIPLE(Complex c)将当前复数对象与形参复数对象相乘;String toString()把当前复数对象的实数部分和虚数部分组合成a+bj的字符串形式。
在main方法中,创建了两个Complex对象c1和c2,分别表示复数3+5i和复数2+3j。
调用c1的complexMULTIPLE方法,传入c2作为参数,得到两个复数相乘的结果。
最后,打印输出结果。
五
编写一个秒表类StopWatch,成员变量和方法自定。编写一个支持快速排序算法的类QuickSort,成员变量和方法自定。对100000, 1000000, …等不同长度的数组中的元素(元素的值随机给定)进行排序,并用秒表对象来记录排序所用的时间。在报告中附上程序截图、运行结果截图和详细的文字说明
程序截图:
运行结果截图:
当数组长度为100000时,运行结果如下:
当数组长度为1000000时,运行结果如下:
详细的文字说明:
StopWatch类具有两个私有成员变量:startTime和endTime,分别用于记录开始时间和结束时间。该类有三个公有方法:start()方法用于开始计时,将当前时间保存在startTime变量中,end()方法用于结束计时,将当前时间保存在endTime变量中,print()方法用于打印程序执行时间,通过计算endTime - startTime获取时间差,并打印出结果。
QuickSort类具有一个公共方法,用于快速排序
Test类用于测试,main里面创建了一个100000(1000000)容量的数组,并将数组的每个元素进行随机赋值,然后打印出数组的前三个数值和后三个数值,然后开始计时,然后对数组进行快速排序,然后结束计时,并打印出数组的前三个数值和后三个数值,证明数组有经过排序,最后打印出快速排序的运行时间。