20145122《Java面向对象程序设计》实验二实验报告

实验名称: Java面向对象程序设计

实验内容:

  1. 初步掌握单元测试和TDD
  2. 理解并掌握面向对象三要素:封装、继承、多态
  3. 初步掌握UML建模
  4. 熟悉S.O.L.I.D原则
  5. 了解设计模式

    PSP时间

    步骤耗时百分比
    需求分析1h12.5%
    设计1h12.5%
    代码实现3h37.5%
    测试1h12.5%
    分析总结2h25.0%

    代码实现过程

    直接使用老师实验课上给出的伪代码。
    m_dRealPart: 实部,代表复数的实数部分
    m_dImaginPart: 虚部,代表复数的虚数部分
    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的字符串形式

根据复数运算的加减乘三个功能进行代码设计。敲出产品代码

package czy;
public class complex
{
public static void main (String args[])
{ComplexNumber a = new ComplexNumber(20,10);
ComplexNumber b = new ComplexNumber(5,5);double z = 10.0;System.out.println(a.toString() + " + " +b.toString() + " = " + a.complexAdd(b).toString());
System.out.println(a.toString() + " + " + z + " = "  + a.complexAdd(z).toString());System.out.println(a.toString() + " - " + b.toString() + " = " + a.complexMinus(b).toString());
System.out.println(a.toString() + " - " + z + " = " + a.complexMinus(z).toString());System.out.println(a.toString() + " * " + b.toString() + " = " + a.complexMinus(b).toString());
System.out.println(a.toString() + " * " + z + " = " + a.complexMulti(z).toString());}
}class ComplexNumber
{
private double realpart;
private double imaginpart;
ComplexNumber()
{realpart = 0.0;imaginpart = 0.0;
}
ComplexNumber(double r,double I)
{realpart = r;imaginpart = I;
}
ComplexNumber(ComplexNumber c)
{realpart = c.getRealPart();imaginpart = c.getImaginaryPart();
}
double getRealPart()
{return realpart;
}
double getImaginaryPart()
{return  imaginpart;
}
void setRealPart(double d)
{realpart = d;
}
void setImaginaryPart(double d)
{imaginpart = d;
}
ComplexNumber complexAdd(ComplexNumber c)
{return new ComplexNumber( this.realpart + c.getRealPart(), this.imaginpart + c.getImaginaryPart());
}
ComplexNumber complexAdd(double c)
{return new ComplexNumber( this.realpart + c, this.imaginpart);
}ComplexNumber complexMinus(ComplexNumber c)
{return new ComplexNumber( this.realpart - c.getRealPart(),this.imaginpart - c.getImaginaryPart());
}
ComplexNumber complexMinus(double c)
{return new ComplexNumber( this.realpart - c, this.imaginpart);
}ComplexNumber complexMulti(ComplexNumber c)
{return new ComplexNumber( this.realpart * c.getRealPart()  - this.realpart * c.getImaginaryPart(),this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());
}
ComplexNumber complexMulti(double c)
{return new ComplexNumber( this.realpart * c, this.imaginpart * c);
}public String toString()
{return "(" + realpart + " + " + imaginpart + " i" + ")";}
}

完成后进行测试代码:

package czy;
public class complextest {public static void main (String args[]){ComplexNumber a = new ComplexNumber(20,10);ComplexNumber b = new ComplexNumber(5,5);ComplexNumber x = new ComplexNumber();double z = 10.0;x = a.complexAdd(b);if(x.getRealPart() !=25.0 )System.out.println("test failed 1!");x = a.complexAdd(z);if(x.getRealPart() !=30.0 )System.out.println("test failed 11!");x = a.complexAdd(b);if( x.getImaginaryPart()!=15.0 )System.out.println("test failed 2!");x = a.complexAdd(z);if( x.getImaginaryPart()!=10.0 )System.out.println("test failed 22!");x = a.complexMinus(b);if( x.getRealPart()!=15.0 )System.out.println("test failed 3!");x = a.complexMinus(z);if( x.getRealPart()!=10.0 )System.out.println("test failed 33!");x = a.complexMinus(b);if( x.getImaginaryPart()!=5.0 )System.out.println("test failed 4!");x = a.complexMinus(z);if( x.getImaginaryPart()!=10.0 )System.out.println("test failed 44!");x = a.complexMulti(b);if( x.getRealPart() !=50.0 )System.out.println(x.getRealPart()+"test failed 5!");x = a.complexMulti(z);if( x.getRealPart() !=200.0 )System.out.println("test failed 55!");x = a.complexMulti(b);         if( x.getImaginaryPart()!=150.0 )System.out.println("test failed 6!");x = a.complexMulti(z);         if( x.getImaginaryPart()!=100.0 )System.out.println("test failed 66!");else System.out.println("test passed!"); }}class ComplexNumber{private double realpart;private double imaginpart;ComplexNumber(){realpart = 0.0;imaginpart = 0.0;}ComplexNumber(double r,double I){realpart = r;imaginpart = I;}ComplexNumber(ComplexNumber c){realpart = c.getRealPart();imaginpart = c.getImaginaryPart();}double getRealPart(){return realpart;}double getImaginaryPart(){return  imaginpart;}void setRealPart(double d){realpart = d;}void setImaginaryPart(double d){imaginpart = d;}ComplexNumber complexAdd(ComplexNumber c){return new ComplexNumber( this.realpart + c.getRealPart(), this.imaginpart + c.getImaginaryPart());}ComplexNumber complexAdd(double c){return new ComplexNumber( this.realpart + c, this.imaginpart);}ComplexNumber complexMinus(ComplexNumber c){return new ComplexNumber( this.realpart - c.getRealPart(),this.imaginpart - c.getImaginaryPart());}ComplexNumber complexMinus(double c){return new ComplexNumber( this.realpart - c, this.imaginpart);}ComplexNumber complexMulti(ComplexNumber c){return new ComplexNumber( this.realpart * c.getRealPart() - this.realpart * c.getImaginaryPart(),this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());}ComplexNumber complexMulti(double c){return new ComplexNumber( this.realpart * c, this.imaginpart * c );}public String toString(){return "(" + realpart + " + " + imaginpart + " i" + ")";}
}

运行的时候出现了问题!
888945-20160413223636660-1881997100.png

找到出错的地方,将关于复数乘法的代码改为:

ComplexNumber complexMulti(ComplexNumber c)
{
return new ComplexNumber( this.realpart * c.getRealPart() - this.imaginpart * c.getImaginaryPart(),
this.realpart * c.getImaginaryPart() + this.imaginpart * c.getRealPart());
}

成功!
888945-20160413224313441-1724671237.png

实验问题和解决方法

实验过程关于复数算法出现了一些错误,但写了测试代码后成功进行了修改。还有如果用debug的话可能方便一些。

测试代码的好处

使用测试代码后会减少程序出现的bug,在符合客户需求的情况下使代码更加完善,也能锻炼我们的思维,增强我们认真负责的意识,一举多得。

转载于:https://www.cnblogs.com/20145122chengzhiyin/p/5389253.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS中AutoLayer自动布局流程及相关方法

关于UIView的Layer,IOS提供了三个方法: 1、layoutSubviews 系统重写布局:在iOS5.1和之前的版本,此方法的缺省实现不会做任何事情(实现为空),iOS5.1之后(iOS6开始)的版本,此方法的缺省实现是使用你设置在此view上面的co…

移动开发web第一天

一、适配问题解决方案:流式布局 viewport1、流式布局百分比布局,通过设置盒子的宽度为百分比来根据屏幕的大小进行伸缩,特点是不受固定像素的限制,内容向两侧填充2、viewport在移动端用来承载网页的这个区域,就是我们…

均值滤波 中值滤波 高斯平滑滤波

均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标象素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素…

javaWeb开发总结 ---- 前端数据插入到后台

一,概述: 本文主要描述如何将数据通过表单提交到后台并插入到数据库.其中后台使用spring框架. 二,开发流程: 明确需求,即将什么数据插入到数据库平台搭建,配置spring, 数据库&#…

对clear float 的理解

之前自己对于清除浮动的用法比较模糊 ,如果用到的话,一般都是采用简单粗暴的方式解决,就是直接用overflow:hidden,但是越用久就会发现其实有BUG,这个BUG正是overflow:hidden带来的,因…

【机器视觉】——相机标定降低重投影误差方法

目录 一、标定结果分析 二、影响标定误差的原因 1、平面标定板黑白棋盘格的精度

linux 安装RedisLive

为什么80%的码农都做不了架构师?>>> RedisLive 用来监控Redis,便于redis性能分析 安装步骤: 1.安装pip(代码参考:https://github.com/pypa/pip) 官方网站:https://pypi.python.org/…

高斯滤波和双向滤波的区别与联系

1. 简介 图像平滑是一个重要的操作,而且有多种成熟的算法。这里主要简单介绍一下Bilateral方法(双边滤波),这主要是由于前段时间做了SSAO,需要用bilateral blur 算法进行降噪。Bilateral blur相对于传统的高斯blur来说…

Eclipse变量名自动补全问题 自定义上屏按键为TAB

Eclipse空格等号等都可以上屏,这样有时候输入变量名再按空格就会自动补全,非常讨厌。那么怎么办呢? 1.首先你的Eclipse需要装有 Eclipse plug-in development environment 和 Eclipse JDT Plug-in Developer Resources 或者直接去下载一个和…

Dreamweaver CS6 Mac破解版

介于之前小子分享的Mac版的Adobe的PS CS6和Illustrator CS6,有用户要求小子分享下Dreamweaver,小子当然乐意效劳。 Dreamweaver CS6 是世界顶级软件厂商Adobe推出的一套拥有可视化编辑界面,用于制作并编辑网站和移动应用程序的网页设计软件。…

【pyqt5学习】——graphicView显示matplotlib图像

目录 一、导入模块 二、自定义一个matplotlib窗口类Figure 三、利用QT_designer绘制窗口 四、写逻辑代码 五、结果展示 一、导入模块 import matplotlibmatplotlib.use("Qt5Agg") from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from matplo…

happens-before规则

1)程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任意后续操作。2)监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁。3)volatile变量规则:对一个v…

what is ssao

说到ssao 就要从ao说起,ao,即间接环境光遮蔽技术。我们知道现实中的光线,除了来自太阳和电灯的直射光线以外,光线碰到物体以后,还会再次反射,折射,而再次反射折射的过程中,又会被其他…

【pyqt5学习】——groupBox显示matplotlib图像

目录 一、导入模块 二、创建matplotlib窗口类 三、qt_designer设计窗口 四、逻辑代码 五、结果展示 一、导入模块 import matplotlibmatplotlib.use("Qt5Agg") from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg from matplotlib.figure impor…

[BZOJ3545][ONTAK2010]Peaks

[BZOJ3545][ONTAK2010]Peaks 试题描述 在Bytemountains有N座山峰,每座山峰有他的高度h_i。有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从…

杭电1027Ignatius and the Princess II模拟

地址:http://acm.hdu.edu.cn/showproblem.php?pid1027 题目: Problem DescriptionNow our hero finds the door to the BEelzebub feng5166. He opens the door and finds feng5166 is about to kill our pretty Princess. But now the BEelzebub has t…

angular 使用rxjs 监听同级兄弟组件数据变化

angular 的官网给出了父子组件之间数据交互的方法,如ViewChild、EventEmitter 但是如果要在同级组件之间进行数据同步,似乎并没有给出太多的信息。 有时候我们想,在一个组件中修改数据之后,马上反映到另外一个组件中, …

OpenCV里IplImage的widthStep参数 和width参数

一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!(为了快速访问,要内存对齐啊)查看OpenCV2.1的源码,在src/cxcore/cxarray.cpp文件中,找到cvInitImageHeader函数&…

【数字信号处理】——Python频谱绘制

# -*- coding: utf-8 -*- from matplotlib import pyplotpyplot.rcParams[font.sans-serif] [SimHei] pyplot.rcParams[axes.unicode_minus] Falseimport numpy as np import matplotlib.pyplot as pl import matplotlib import math import randomN 500 # 绘制点总数 fs 5…