《数据结构与面向对象程序设计》实验三报告
课程:《程序设计与数据结构》
班级: 1923
姓名: 杨坤
学号:20192320
实验教师:王自强
实验日期:2020年10月8日
必修/选修: 必修
1.实验内容
参考《实验二 Java面向对象程序设计》:http://www.cnblogs.com/rocedu/p/6736847.html
实验内容
下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
-
初步掌握单元测试和TDD
-
理解并掌握面向对象三要素:封装、继承、多态
-
初步掌握UML建模
-
完成蓝墨云上 (1)-(5)实验。
2. 实验过程及结果
1.Java编程的学习 《积极主动敲代码,使用JUnit学习Java》给出了学习方法。其中提到的JUnit就是Java单元测试工具。
public class MyUtil{
public static String percentage2fivegrade(int grade){
//如果成绩小于60,转成“不及格”
if (grade < 60)
return "不及格";
//如果成绩在60与70之间,转成“及格”
else if (grade < 70)
return "及格";
//如果成绩在70与80之间,转成“中等”
else if (grade < 80)
return "中等";
//如果成绩在80与90之间,转成“良好”
else if (grade < 90)
return "良好";
//如果成绩在90与100之间,转成“优秀”
else if (grade < 100)
return "优秀";
//其他,转成“错误”
else
return "错误";
}
}
2.以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer buffer=new StringBuffer();
buffer.append('s');
buffer.append("tringBuffer");
System.out.println(buffer.charAt(1));
System.out.println(buffer.capacity());
System.out.println();
System.out.println(buffer.indexOf("tring"));
System.out.println("buffer= "+ buffer.toString());
System.out.println(buffer.length());
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class StringBufferDemoTest {
StringBuffer a=new StringBuffer("iamyk");
StringBuffer b=new StringBuffer("iamykiamaman");
StringBuffer c=new StringBuffer("iamykiamamaniam");
@Test
public void testchatAt()
{
assertEquals('i',a.charAt(0));
assertEquals('m',a.charAt(2));
assertEquals('k',a.charAt(4));
}
@Test
public void testlentgh()
{
assertEquals(5,a.length());
assertEquals(12,b.length());
assertEquals(15,c.length());
}
@Test
public void testindexOf()
{
assertEquals(1,a.indexOf("am"));
assertEquals(4,b.indexOf("kiam"));
}
}
3.对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
// Server Classes
abstract class Data {
abstract public void DisplayValue();
}
class Integer extends Data {
boolean value1;
int value2;
Integer() {
value1 =true;
value2 =100;
}
public void DisplayValue(){
System.out.println (value1);
System.out.println(value2);
}
}
// Pattern Classes
abstract class Factory {
abstract public Data CreateDataObject();
}
class BooleanIntFactory extends Factory {
public Data CreateDataObject(){
return new Integer();
}
}
//Client classes
class Document {
Data pd;
Document(Factory pf){
pd = pf.CreateDataObject();
}
public void DisplayData(){
pd.DisplayValue();
}
}
//Test class
public class MyDoc {
static Document d;
public static void main(String[] args) {
d = new Document(new BooleanIntFactory());
d.DisplayData();
}
}
4.任务:以TDD的方式开发一个复数类Complex,要求如下:
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
import java.util.Scanner;
public class ComplexNumber {
double Realpart;
double Imagepart;
public double getRealpart() {
return Realpart;
}
public double getImagepart() {
return Imagepart;
}
public void setRealpart(double realpart) {
Realpart = realpart;
}
public void setImagepart(double imagepart) {
Imagepart = imagepart;
}
public ComplexNumber() {
}
public ComplexNumber(double R, double I) {
Realpart = R;
Imagepart = I;
}
public static ComplexNumber add(ComplexNumber a, ComplexNumber b) {
ComplexNumber temp = new ComplexNumber();
temp.Realpart = a.Realpart + b.Realpart;
temp.Imagepart = a.Imagepart + b.Imagepart;
return temp;
}
public static ComplexNumber sub(ComplexNumber a, ComplexNumber b) {
ComplexNumber temp = new ComplexNumber();
temp.Realpart = a.Realpart - b.Realpart;
temp.Imagepart = a.Imagepart - b.Imagepart;
return temp;
}
public static ComplexNumber multi(ComplexNumber a, ComplexNumber b) {
ComplexNumber temp = new ComplexNumber();
temp.Realpart = a.Realpart * b.Realpart - a.Imagepart * b.Imagepart;
temp.Imagepart = a.Realpart * b.Imagepart + a.Imagepart * b.Realpart;
return temp;
}
public static ComplexNumber div(ComplexNumber a, ComplexNumber b) {
ComplexNumber temp = new ComplexNumber();
double t = Math.pow(b.Realpart, 2) + Math.pow(b.Imagepart, 2);
temp.Realpart = (a.Realpart * b.Realpart + a.Imagepart * b.Imagepart) / t;
temp.Imagepart = (a.Imagepart * b.Realpart - a.Realpart * b.Imagepart) / t;
return temp;
}
public static void main(String[] args) {
ComplexNumber a=new ComplexNumber();
ComplexNumber b=new ComplexNumber();
ComplexNumber result=new ComplexNumber();
String operate;
Scanner scan=new Scanner(System.in);
System.out.println("input the a ");
a.Realpart=scan.nextDouble();
a.Imagepart=scan.nextDouble();
System.out.println(a.Realpart+"+"+"("+a.Imagepart+"i"+")");
System.out.println("choose the operate: ");
operate=scan.next();
System.out.println("input the b ");
b.Realpart=scan.nextDouble();
b.Imagepart=scan.nextDouble();
System.out.println(b.Realpart+"+"+"("+b.Imagepart+"i"+")");
if(operate.equals("+"))
{
result=add(a,b);
}
else if(operate.equals("-"))
{
result=sub(a,b);
}
else if(operate.equals("*"))
{
result=multi(a,b);
}
else if(operate.equals("/"))
{ result=div(a,b);}
System.out.println(a.Realpart+"+"+"("+a.Imagepart+"i"+")"+operate+b.Realpart+"+"+"("+b.Imagepart+"i"+")"+"=="+result.Realpart+"+"+"("+result.Imagepart+"i"+")");
}
}
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class ComplexNumberTest {
ComplexNumber a = new ComplexNumber(1.0, 2.0);
ComplexNumber b = new ComplexNumber(1.0, -4.0);
ComplexNumber c = new ComplexNumber(19.0, 0.0);
ComplexNumber d = new ComplexNumber(0.0, -3.0);
ComplexNumber e = new ComplexNumber(0.0, 0.0);
@Test
public void testadd() {
assertEquals(2.0d, ComplexNumber.add(a, b).Realpart,1d);
}
@Test
public void testsub() {
assertEquals(18.0d, ComplexNumber.sub(c, b).Realpart,1d);
}
@Test
public void testmulti() {
assertEquals(-57.0d, ComplexNumber.multi(c, d).Imagepart, 1d);
}
}
使用WhiteStarUML对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html
类图中只少两个类。
3. 实验过程中遇到的问题和解决过程
- 问题1:对于一开始junit的设置出现没有讲解的毛病
- 问题1解决方案:百度。
- 问题2:不理解多态的问题
- 问题2的解决方法:询问表哥,在他的讲解下,理解了多态以及继承的部分内容,剩下的百度。
其他(感悟、思考等)
还是要多加练习,不然会手生!要提前预习看书,平时多敲代码,对于书上的代码,要能都敲一遍,对于不理解、不懂得地方,多向老师同学询问。
参考资料
参考《实验二 Java面向对象程序设计》:http://www.cnblogs.com/rocedu/p/6736847.html
实验内容
下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。