OO第一次博客做業

OO第一次博客做業

BUAA_1706_HugeGunjava

目錄

關於面向對象python

三次做業遇到的BUG算法

代碼分析sass

互測感想bash

一點感想架構

<span id="1">ide

<table><tr><td bgcolor=#000a0ff>關於java&面向對象</td></tr></table>函數

​ 這學期才接觸java,面向對象之前只在C++裏面用過一點,因此一開始對於怎麼寫,以及java語法有點不太適應。性能

我的體會:學習

關於類:

一、相似C++中的struct,構造函數、內置方法(函數 )都比較類似

二、可是沒法重載運算符,這是比較難受的一點。

三、儘可能避免代碼的重複,把private和public的方法搞清晰。

四、把咱們須要解決的問題進行拆分,拆得好就寫得快

關於java語法:

一、當心使用運算符,第一次做業用==去比較兩個BigInteger調了好久。

二、慎用clone,(我選擇手寫copy

三、注意可變類的賦值是引用

​ OO其實我學得不太多,理解也不夠深,像繼承等等東西,也沒怎麼用過,等之後再來談這方面吧。

<span id="2">

<table><tr><td bgcolor=#000a0ff>三次做業遇到的BUG</td></tr></table>

因爲公測沒有wa過,因此列舉一下寫做業過程當中的bug和互測的bug

第一次做業:

一、使用==比較兩個BigInteger

二、全空格/tab

三、答案爲0沒輸出

四、特殊符號

五、大正則爆棧

六、指數上的空格分隔符號和整數

第二次做業:

一、sin (x)判爲WF

二、s in(x)沒判爲WF

三、遞歸使用全局變量

四、使用引用致使不想改的對象值改了

第三次做業:

一、嵌套括號中的空格

二、替換縮進tab爲空格把合法字符集的tab替了

三、多層嵌套出問題

總結:

bug一般來自三種緣由:

一、對題面理解的疏忽

二、對本身代碼架構細節出現問題(使用錯誤方法

三、不當心寫錯

在經歷三次互測以後,我發現, 別人關於1,2產生的bug較多,我關於2,3產生的bug較多。

固然,關於別人的bug是在強測以後,本身代碼的在進入互測時只存在第3種bug,第2種bug在編寫時有時出現,這意味着我還須要寫做業時更細心,尤爲是第三次做業的第二個bug讓我很是地傷心555

<span id="3">

<table><tr><td bgcolor=#000a0ff>代碼分析</td></tr></table>

第一次做業:

類圖:

1553580380450

耦合度:
calss OCavg WMC
main.Function 5.25 63.0
main.Main 3.0 3.0
Total 66.0
Average 5.076923076923077 33.0

第一次做業比較簡單,用map記錄不一樣指數對應的係數和,也沒有必要爲項再建個類,合併同類項和基本的優化輸出就能拿夠性能分。

第二次做業:

類圖:

Package main

耦合度:
class OCavg WMC
main.Function 4.153846153846154 54.0
main.Main 3.0 3.0
main.Optimize 4.454545454545454 49.0
main.Term 2.6666666666666665 48.0
Total 154.0
Average 3.5813953488372094 38.5

沒有在第一次做業的基礎上擴展,由於項的內容增長了不少,解析字符串的方法不變。

使用四元組來表示一個項,分別爲一個項的係數,x的指數,sin的指數,cos的指數。若干項裝進map造成function。

此次做業優化寫了好久也拿到了滿分,詳情會在優化博客描述。

第三次做業:

類圖:

Package main

耦合度:
class OCavg WMC
main.Function 5.071428571428571 71.0
main.Main 4.0 4.0
main.Term 3.0952380952380953 65.0
Total 140.0
Average 3.888888888888889 46.666666666666664

遞歸降低,Term類和Function類互相調用以解決function嵌套,寫起來更簡單。

項改成三元組,記錄一個項的係數、x的指數和一個String表示一個固定字符串。

優化改成一層內兩兩合併同類項,所以沒有再開一個類來優化,在課下的隨機數據表現很好,長度能作到某些其餘架構或者不優化的20%。輸出沒有一個多餘的括號。

<span id="4">

<table><tr><td bgcolor=#000a0ff>互測感想</td></tr></table>

聽說代碼風格是爲了互測別人能看懂本身代碼,而三次做業我沒有一次看過別人代碼(除了幫別人消除warning,這顯得很尷尬。

對於A組的同窗,只要是強測數據不水,很難是能經過看代碼看出bug來的。

測試永遠是檢查一個代碼是否有bug的最簡潔的方法。

本地怎麼測呢,對拍。

對於較短的代碼,不須要對拍便可檢查代碼,證實正確性。而對於很長的、含有多個文件的代碼,對拍顯得更有效率和效果。

話很少說,附上第三次的互測對拍代碼(我是assassin)。

其中, 每次運行完以後那次調用assassin求二階導是爲了判斷那我的的輸出是否知足格式要求。好比sin(2*x)之類的,而比較輸出正確性是用CPP輸出python代碼而後調用python的sympy的化簡來比較導數是否和個人等價。

:)
data.exe 6
java -cp alterego/src Main < a.in > alterego.out
java -cp assassin/src main.Main < alterego.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc alterego.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> alterego.out
	) else (
		echo ok
	)
)
java -cp archer/src poly.Main < a.in > archer.out
java -cp assassin/src main.Main < archer.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc archer.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> archer.out
	) else (
		echo ok
	)
)
java -cp assassin/src main.Main < a.in > assassin.out
java -cp assassin/src main.Main < assassin.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> assassin.out
	) else (
		echo ok
	)
)
java -cp berserker/src homework.Main < a.in > berserker.out
java -cp assassin/src main.Main < berserker.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc berserker.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> berserker.out
	) else (
		echo ok
	)
)
java -cp caster/src derivation.Main < a.in > caster.out
java -cp assassin/src main.Main < caster.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc caster.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> caster.out
	) else (
		echo ok
	)
)
java -cp lancer/src PolyCal < a.in > lancer.out
java -cp assassin/src main.Main < lancer.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc lancer.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> lancer.out
	) else (
		echo ok
	)
)
java -cp rider/src Main < a.in > rider.out
java -cp assassin/src main.Main < rider.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc rider.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> rider.out
	) else (
		echo ok
	)
)
java -cp saber/src Derivation < a.in > saber.out
java -cp assassin/src main.Main < saber.out > temp.txt
fc temp.txt wf.txt
if errorlevel == 1 (
	echo  ok
) else (
	fc saber.out wf.txt
	if errorlevel == 1 (
		echo "WRONG FORMAT!" >> saber.out
	) else (
		echo ok
	)
)


test.exe assassin.out alterego.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo alterego >> hack.txt
	)
)
test.exe assassin.out archer.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo archer >> hack.txt
	)
)
test.exe assassin.out berserker.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo berserker >> hack.txt
	)
)
test.exe assassin.out caster.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo caster >> hack.txt
	)
)
test.exe assassin.out lancer.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo lancer >> hack.txt
	)
)
test.exe assassin.out rider.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo rider >> hack.txt
	)
)
test.exe assassin.out saber.out
python test.py > test.out
fc test.out test.ans
if errorlevel == 1 (
	fc assassin.out wf.txt
	if errorlevel == 1 (
		copy hack.txt + a.in
		echo saber >> hack.txt
	)
)
goto )

<span id="5">

<table><tr><td bgcolor=#000a0ff>一點感想</td></tr></table>

關於OO,我學習得不夠,要抽空多看看菜鳥教程。

關於做業,我太想作好了,致使花掉不少時間,因此我第三次做業沒有花太多心思優化,一方面由於事情太多,無意優化,一方面個人構架上的簡單優化對於隨機長數據表現太好。對於優化,我會盡可能快地把優化博客寫出來。鍋有點多,這幾天快死了

另外,感謝助教PaParaZz1對咱們的指導、建議,感謝niupple、mountvoom、prime2一、login25六、fafa、wjy、wzm等大佬的幫助和鼓勵

你們一塊兒加油吧

ps:用的高中建的blog,裏面有不少算法題題解和模板,有興趣的能夠玩一玩。

相關文章
相關標籤/搜索