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.pswp.cn/news/255546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255546.shtml
英文地址,請注明出處:http://en.pswp.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…