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,里面有不少算法题题解和模板,有兴趣的能够玩一玩。

相关文章
相关标签/搜索