oo第一次博客
1.第一次作业:

此时初识java,对于面向对象编程并不熟悉。整个程序仅有一个java文件,使用与c语言编程类似的方法实现程序功能。关键在于状态转换,判断某一字符是否正确以及下一字符是否符合规则。程序规模约300行。
在实现程序的过程中,学习了正则表达式的判断和使用。并且为了避免爆栈,将字符串的判断分为多个正则表达式。
BUG发现:在进行互测和公测的过程中,因为状态判断太过繁复,还是出现了错误的ERROR判断,这警醒我要在之后的代码中运用多个类,这样不容易出现BUG。在检查别人代码的过程中,发现了由于只使用一个正则表达式而产生的爆栈问题。
发现BUG的策略为根据公测所提供的分支树进行样例设置,并添加随机测试样例,并阅读代码。出现错误样例后对代码中相应的输出部分进行debug调试,找到bug原因。
2.第二次作业:


建立了Elevator,Floor,Main,Reqlist,Require,Scheduler六个类。
Elevator类,获取输入的命令,判断对应命令的行进方向,并且进行电梯运行的模拟,以及同志请求的判断。该类大概150行左右。
其中包含的go up,go down,go steam方法为模拟电梯运行,check方法的作用为检查电梯输入是否正确。
Floor类
创立数组记录对应楼层的上下按钮以及电梯按钮的按下情况,并配合进行同志判断,大小为50行。
Main类
获取输入的类,在该类中进行输入是否合法的判断。大小为150行
Reqlist类
用数组记录并存放程序读入的指令。大小为70行。
Require类
记录电梯的运动方向,当前楼层,时间,请求,并附有输出调试的部分。大小40行。
Scheduler类
调度器类,获取当前指令并发送给电梯。大小20行。
体会:许多在构思时认为会使用的类和方式实际上却并没有使用,判断条件还需要优化。
BUG:在实现时由于在进行符号判断之前先去掉了“(”以及“,”,导致之前的非法输入判断出现了问题,以及int与double的转换过程出现了数组越界导致非法的ERROR出现。
发现BUG:通过阅读源码发现了特殊时间上的输出未删除问题,在遍历测试分支树的时候发现了unsignedint的数据边界问题。
3.第三次作业


建立了Elevator,Floor,Main,Reqlist,Require,Scheduler六个类。
Elevator类,获取输入的命令,判断对应命令的行进方向,并且进行电梯运行的模拟,以及同志请求与捎带请求的判断。该类大概220行左右。
其中包含的go up,go down,go steam方法为模拟电梯运行,check方法的作用为检查电梯输入是否正确。
Floor类
创立数组记录对应楼层的上下按钮以及电梯按钮的按下情况,并配合进行同志判断,大小为50行。
Main类
获取输入的类,在该类中进行输入是否合法的判断。大小为150行
Reqlist类
用数组记录并存放程序读入的指令。大小为70行。
Require类
记录电梯的运动方向,当前楼层,时间,请求,并附有输出调试的部分。大小40行。
Scheduler类
调度器类,获取当前指令并发送给电梯。大小20行。
体会:捎带电梯看似好理解,实际上要完全明白指导书的要求还是需要反复阅读。
BUG:修复了上次作业的非法输入判断,由于个人对捎带方式的理解错误,导致程序出现在开关门的时候获取按钮指令会开门的情况。
发现BUG:通过遍历分支数,发现将同志请求视为捎带请求的BUG。
4.心得体会
1.每次编程需要给下一次编程提供可改正的空间,不然就只能通过多加一维判断数组来解决bug,这些补丁最终会导致代码越来越复杂臃肿,直到无法修改位置。形成自己能够明白而且规范的代码风格十分重要,关键部分最好有注释,不仅方便自己debug,也方便了测试自己代码的同学。
2.修改bug要谨慎,特别是第三次作业中,最好不要贸然删除自己的代码,最好留下自己修改前的代码与修改之后的代码进行对比。
3.注意Readme的撰写,指导书中没有规定的边界条件均需要我们自己定制。
4.需要加强面向对象编程的能力,不能让自己的思想停留在面向过程编程的时代。
5.当类变多的时候,许多代码都会改一处而动全身,在第三次作业的过程中常出现改好了一个bug又新增一个bug的情况,java编程需要更多的大局观。
浙公网安备 33010602011771号