20165115 实验二 面向对象程序设计
这一次的实验,老师按照实验内容的不同将实验分成了五个部分进行。五个部分的侧重难易都有区别,实验报告中的叙述也会有所区别。
第一部分
先上实验结果截图:
这一部分的实验内容没有什么创造性的内容,机械单纯的重复一下博客中给出的代码就可以得到相应的实验结果。另一方面,这一部分的内容主要目的还是掌握基础的Junit的用法。相对来讲没有什么难度,不做赘述。
第二部分
依旧先是截图:
到了这一部分就是juint实战操作了。需要对junit的使用方法有清晰的认识才能够完成junit部分的代码撰写。但是相对来讲并不难,掌握了基本原理之后写起来还是很快的。在给出的博客的指导下也并没有遇到什么问题。
第三部分
截图:
这一部分开始真正的写一些新的代码了。这一部分的内容我有一个最大的疑惑就是,让已有的程序支持Java语言中已有的系统类,如Long、Float类等等,是在程序中直接对这些类进行继承修改等操作,这在C语言当中是不能想象的。最开始出现了问题时我还一度怀疑是不是老师给出的示例出现了问题(后来发现时敲错了一个单词....)但是这也体现了Java代码相对自由度较高的特点。
这一部分的代码内容虽然理解并不是非常深入,但是依照之前的经验和博客中给出的样例还是可以完成基本要求的。现在我对这一部分的代码还是有一些概念上的不理解,希望可以在课上听到老师的讲解。
第四部分
这一部分几乎可以说是这一次实验最复杂的部分。与之前各部分的难度完全不在一个次元。既然是完全写代码的部分,测试通过的截图就不那么重要了,下面是两个部分的代码:
public class MyComplex {
double a, b;
MyComplex(double m, double n) {//构造函数设置实部虚部
a = m;
b = n;
}
public double getRealPart() {//返回实部
return a;
}
public double getImagePart() {//返回虚部
return b;
}
public MyComplex ComplexAdd(MyComplex y) {//加法
double m = y.getRealPart();
double n = y.getImagePart();
double x = a + m;
double z = b + n;
return new MyComplex(x, z);
}
public MyComplex ComplexSub(MyComplex y) {
double m = y.getRealPart();
double n = y.getImagePart();
double x = a - m;
double z = b - n;
return new MyComplex(x, z);
}
public MyComplex ComplexMulti(MyComplex y) {
double m = y.getRealPart();
double n = y.getImagePart();
double x = a * m;
double z = b * n;
return new MyComplex(x, z);
}
public MyComplex ComplexDiv(MyComplex y) {
double m = y.getRealPart();
double n = y.getImagePart();
double x = a / m;
double z = b / n;
return new MyComplex(x, z);
}
@Override
public java.lang.String toString() {
String s = "";
if (a != 0 && b > 0 && b != 1) {
s += a + "+" + b + "i";
}
else if (a != 0 && b == 1) {
s += a + "+i";
}
else if (a != 0 && b < 0 && b != -1) {
s += a + "" + b + "i";
}
else if (a != 0 && b == -1) {
s += a + "-i";
}
else if (a != 0 && b == 0) {
s += a;
}
else if (a == 0 && b != 0) {
s += b + "i";
}
else if (a == 0 && b == 0) {
s += "0.0";
}
return s;
}
}
以上是计算器的代码;
import junit.framework.TestCase;
import org.junit.Test;
public class MyComplexTest extends TestCase {
MyComplex a=new MyComplex(0,0);
MyComplex b=new MyComplex(1,1);
MyComplex c=new MyComplex(-1,-1);
MyComplex d=new MyComplex(20.16,53.10);
MyComplex e=new MyComplex(2,3);
@Test
public void testgetReal(){
assertEquals(0.0,a.getRealPart());
assertEquals(-1.0,c.getRealPart());
assertEquals(20.16,d.getRealPart());
}
@Test
public void testgetIma(){
assertEquals(0.0,a.getImagePart());
assertEquals(-1.0,c.getImagePart());
assertEquals(53.1,d.getImagePart());
}
@Test
public void testComAdd(){
assertEquals("0.0",b.ComplexAdd(c).toString());
assertEquals("1.0+i",a.ComplexAdd(b).toString());
assertEquals("19.16+52.1i",c.ComplexAdd(d).toString());
assertEquals("-1.0-i",a.ComplexAdd(c).toString());
assertEquals("21.16+54.1i",b.ComplexAdd(d).toString());
}
@Test
public void testComSub(){
assertEquals("1.0+i",b.ComplexSub(a).toString());
assertEquals("-21.16-54.1i",c.ComplexSub(d).toString());
assertEquals("2.0+2.0i",b.ComplexSub(c).toString());
}
@Test
public void testComMul(){
assertEquals("0.0",a.ComplexMulti(d).toString());
assertEquals("-1.0-i",b.ComplexMulti(c).toString());
assertEquals("-20.16-53.1i",c.ComplexMulti(d).toString());
assertEquals("40.32+159.3i",d.ComplexMulti(e).toString());
}
@Test
public void testComDiv(){
assertEquals("0.0",a.ComplexDiv(b).toString());
assertEquals("-1.0-i",c.ComplexDiv(b).toString());
assertEquals("-0.5-0.3333333333333333i",c.ComplexDiv(e).toString());
assertEquals("10.08+17.7i",d.ComplexDiv(e).toString());
}
}
以上是测试部分的代码。
测试通过的截图。
第五部分
这一部分来的确实突然==不过好在只涉及到了一个新的软件的学习。基本的操作在界面中就能摸索出来,实在遇到不会的地方百度也可以找到很多教程。不做赘述
截图如下: