20145120 《Java程序设计》实验二实验报告
20145120 《Java程序设计》实验二实验报告
实验名称:Java面向对象程序设计
实验目的与要求:
- 初步掌握单元测试和TDD
- 理解并掌握面向对象三要素:封装、继承、多态
- 初步掌握UML建模
- 熟悉S.O.L.I.D原则
- 了解设计模式
实验内容、步骤
| 步骤 | 耗时 | 百分比 |
|---|---|---|
| 需求分析 | 1 | 10% |
| 设计 | 1 | 10% |
| 代码实现 | 3 | 30% |
| 测试 | 3 | 30% |
| 分析总结 | 2 | 20% |
代码调试过程
伪代码
ComplexNumber() 构造函数,将实部,虚部都置为0
ComplexNumber(double r, double i) 构造函数,创建复数对象的同时完成复数的实部,虚部的初始化
GetRealPart() 获取实部
GetImaginaryPart() 获取虚部
SetRealPart(double d) 设置实部
SetImaginaryPart(double d) 设置虚部
ComplexAdd(ComplexNumber c) 复数相加
ComplexAdd(double c) 复数相加
ComplexMinus(ComplexNumber c) 复数相减
ComplexMinus(double c) 复数相减
ComplexMulti(ComplexNumber c) 复数相乘
ComplexMulti(double c) 复数相乘
toString() 把当前复数对象的实部,虚部组合成a+bi的字符串形式
(感觉老师给的已经很完善了,直接借用)
产品代码
比着书上潜水艇,role,剑士法师什么的写出来了
package experiment;
/**
* Created by lenovo on 2016/4/12.
*/
public class ComplexNumber{
private double real;
private double imag;
public ComplexNumber() {
this.real=0;
this.imag=0;
}
public ComplexNumber(double r,double i){
this.real = r;
this.imag = i;
}
public double getReal() {
return real;
}
public void setReal(double real) {
this.real = real;
}
public double getImag() {
return imag;
}
public void setImag(double imag) {
this.imag = imag;
}
public ComplexNumber ComplexAdd(ComplexNumber c) {
double r = this.real + c.real;
double i = this.imag + c.imag;
return new ComplexNumber(r,i);
}
public ComplexNumber ComplexAdd(double c) {
double r = this.real + c;
double i = this.imag;
return new ComplexNumber(r,i);
}
public ComplexNumber ComplexMinus(ComplexNumber c) {
double r = this.real - c.real;
double i = this.imag - c.imag;
return new ComplexNumber(r,i);
}
public ComplexNumber ComplexMinus(double c) {
double r = this.real - c;
double i = this.imag;
return new ComplexNumber(r,i);
}
public ComplexNumber ComplexMulti(ComplexNumber c) {
double r = this.real*c.real - this.imag*c.imag;
double i = this.real*c.imag + this.imag*c.real;
return new ComplexNumber(r,i);
}
public ComplexNumber ComplexMulti(double c) {
double r = this.real*c;
double i = this.imag*c;
return new ComplexNumber(r,i);
}
public String toString() {
if (real==0 && imag==0) return "0";
if (real==0 && imag!=0) return imag + "i";
if (imag==0 && real!=0) return real + "";
if (imag<0) return real + " - " + (-imag) + "i";
return real + " + " + imag + "i";
}
}
开始我忘了在getreal,getimag后面加(),看着那条红色波浪形想了很久愣是没注意到,后来看到自己前面写的ComplexNumber()才想起来。
toString比较麻烦,一开始我没有考虑好为0的时候的情况,测试出来bug才改过来的。
测试代码
package experiment;
/**
* Created by lenovo on 2016/4/12.
*/
public class ComplexNumberTest {
public static void main(String[] args) {
int pass=0,fail=0;
ComplexNumber a = new ComplexNumber(2.2,3.3);
ComplexNumber b = new ComplexNumber();
b.setReal(-5.5);
b.setImag(7.7);
ComplexNumber c = new ComplexNumber();
//getreal
if(a.getReal()!=2.2){
fail++;System.out.println(1);
}else {
pass++;
}
//grtimag
if(a.getImag()!=3.3){
fail++;System.out.println(2);
}else {
pass++;
}
//setreal
if(b.getReal()!= -5.5){
fail++;System.out.println(3);
}else {
pass++;
}
//setimag
if(b.getImag()!=7.7){
fail++;System.out.println(4);
}else {
pass++;
}
//初始化为0
if(c.getReal()!=0||c.getImag()!=0){
fail++;System.out.println(5);
}else {
pass++;
}
//toString 0
if(c.toString()!="0"){
fail++;System.out.println(6);
}else {
pass++;
}
//addComplex
c=a.ComplexAdd(b);
if(c.getReal()!= -3.3||c.getImag()!=11.0){
fail++;System.out.println(c.toString()+"7");
}else {
pass++;
}
//add
c=a.ComplexAdd(4.4);
if(c.getReal()!=(2.2+4.4)||c.getImag()!=3.3){
fail++;System.out.println(c.toString()+"8");
}else {
pass++;
}
//minusComplex
c=a.ComplexMinus(b);
if(c.getReal()!= 7.7||c.getImag()!= -4.4){
fail++;System.out.println(c.toString()+"9");
}else {
pass++;
}
//minus
c=a.ComplexMinus(9.9);
if(c.getReal()!= -7.7||c.getImag()!= 3.3){
fail++;System.out.println(c.toString()+"10");
}else {
pass++;
}
//multiComplex
c=a.ComplexMulti(b);
if(c.getReal()!=(2.2*-5.5-3.3*7.7)||c.getImag()!=(2.2*7.7+3.3*-5.5)){
fail++;System.out.println(c.toString()+"11");
}else {
pass++;
}
//multi
c=a.ComplexMulti(2.5);
if(c.getReal()!= 5.5||c.getImag()!= 8.25){
fail++;System.out.println(c.toString()+"12");
}else {
pass++;
}
//toString
if(b.toString()!="-5.5 + 7.7i"){
fail++;System.out.println(b.toString()+"13");
}else {
pass++;
}
a.setReal(-1.2);
a.setImag(-3.4);
if(a.toString()!="-1.2 - 3.4i"){
fail++;System.out.println(a.toString()+"14");
}else {
pass++;
}
System.out.printf("pass%d,fail%d",pass,fail);
}
}
(为什么我测试代码是这样的容我在下文说明)
单元测试以及遇到的问题
不能生成测试类
总的来说,我用IDEA尝试使用Junit,失败
百度了一下,尝试使用org.junit.Test

...???

找不到...?

使用everything找了下,发现IDEA是有叫junit的,然而这并不能解决我的问题...
自己又摸索半天,看到这个的时候我是很高兴的

然而接下来

跟着一步一步走之后,发现要找个含Groovy Dis***(记不清)之类的文件夹,还是找不到,还是不行
所以最后我只能自己做一个
单元测试中的问题和解决方法
1.首先我先用简单的数据做了测试,没有问题,后来第二次换数据测的时候忘了改条件,用的还是第一次的条件,突然多出很多错误。后来我一一改过了。

2.我原来的代码记录了测试通过和没通过的数量,感觉很模糊,不方便分析,于是我又在代码后面加上了一句输出,输出实际值和数字序号,分析起来方便多了。先看看是哪条测试没通过,对比测试值和实际值,分析,debug。

其中有些是程序问题,还有些值是我算错了

例如这个-6.6应该是3.3
3.程序问题其实就是我一开始忘了需要BigDecimal,看到输出的实际值的时候才想起来,但是重新用BigDecimal、equal改代码很麻烦,我想了个好办法,直接写算式,例如,实部2.2和4.4相加,就和(2.2+4.4)比较,而不是和6.6比。成功解决问题。
4.还有一个我还没解决的问题,我感觉输出的字符串是一样的,至少,从输出看它已经达到了我的预期效果,然而程序告诉我不是...

单元测试的好处
让人多角度思考,锻炼思维的全面性。能提高程序的弹性,让程序考虑到更多方面,避免轻易出现bug。
20145120 《Java程序设计》实验二实验报告的更多相关文章
- 2015526 《Java程序设计》实验二实验报告
2015526 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码( ...
- 20155301 《Java程序设计》实验二实验报告
20155301 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码 ...
- 20145314郑凯杰 《Java程序设计》实验二 实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- 20145328 《Java程序设计》实验二实验报告
20145328 <Java程序设计>实验二实验报告 实验名称 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 ...
- Java实验二实验报告:java面向对象程序设计
java实验二实验报告 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验 ...
- 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践
20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...
- 20145240 《Java程序设计》第一次实验报告
20145240 <Java程序设计>第一次实验报告 实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145240命令建立实验目录,并使用dir命令查看目 ...
- 20145330《Java程序设计》第一次实验报告
20145330<Java程序设计>第一次实验报告 实验一Java开发环境的熟悉 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Ja ...
- 20145320《Java程序设计》第一次实验报告
20145320<Java程序设计>第一次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.08 18: ...
随机推荐
- Unieap3.5-Grid+Form下拉列表高度设置
Form <div id="SUNIT_ID" name="SUNIT_ID" dojoType="unieap.form.ComboBox&q ...
- MVC开发Markdown编辑器(1)
MVC markdown MVC开发Markdown编辑器(1) 前言 安装 解析 结束语 前言 想在近段时间通过mvc开发个人博客,编辑器希望是markdown风格的,这样写文字会很方便.首先先解决 ...
- pap与chap协议
1.pap:直接在网络上发送密码明文 2.chap: 网络上发送的是密码的密文;server给client发一段随机数(challenge),client利用随机数对密码进行加密,将用户名和加密后的密 ...
- C++ 三种工厂模式
工厂模式是将带有继承于基类的子类的创建过程交于一个工厂来创建,通过赋予不同的创建标识来创建不同的子类. 基于自己的理解和使用这里巩固一下工厂模式. 我们的项目目前使用最多的是简单工厂模式,不过其他两种 ...
- 打包程序tar
tar [选项] tar文件 [目录文件] 常用选项如下所述: -c:创建新的归档文件 -d:检查归档文件与指定目录的差异 -r:向归档文件中追加文件 -v:显示命令的执行日期 -u:只有当需要追加 ...
- GoldenGate中使用FILTER,COMPUTE 和SQLEXEC命令
本文主要介绍OGG中一些过滤或计算函数的用法,以及sqlexec的基本用法 SQLPREDICATE 在使用OGG初始化时,可以添加此参数到extract中,用于选择符合条件的记录,下面是OGG官方文 ...
- GoLang安装
GoLang的官网被墙,镜像下载地址:http://tip.golang.so/dl/ 或者 http://golang.so/dl/ 安装说明:http://tip.golang.so/doc/i ...
- 怎么做QQ、微信等消息气泡
主XML: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android ...
- Eclipse 4.6 Neon, could not create the java virtual machine
下了eclipse 4.6,打开报错:could not create the java virtual machine. a fatal exception has occurred. 命令行用 e ...
- (转)python文件操作 seek(),tell()
seek():移动文件读取指针到指定位置 tell():返回文件读取指针的位置 seek()的三种模式: (1)f.seek(p,0) 移动当文件第p个字节处,绝对位置 (2)f.seek(p,1) ...