前言:
个人感觉
第四次练习是之前三次练习的总结和衍生,在前三次练习的不断叠加的基础上,添加了选择题、多选题、填空题和对其他异常情况的添加的需求,回望第一次练习,从一开始的单单通过输入题目数量和题目以及其答案输出题目以及其对错,通过一次又一次对一开始的源码的修改和功能的添加,最后实现了试卷对题目的调用、题目种类的添加、对异常状况的处理.......原来的代码逐渐变得更实用,更偏向现实中的应用,个人感觉这是一次非常奇妙的体验
第五次练习算是开了个新坑,结合老师的话和关于之后练习的资料,与之前练习不同的一点考的是类与类之间继承的运用成为了本四次大作业的关键点,所以在完成这次练习的途中除了类的定义和类与类之间关系的运用,还得注意一下哪里的功能方便以后的继承类来实现和穿插
第六次练习在第五次练习的基础上除了添加加了落地扇这一新的对象以外还增加了对并联电路的录入两种方式的添加,最主要的难点还是在主电路中并联电路电阻的获取和分压的计算
对这三次练习来说,整体题量虽然减少,但每题的难度是不断增加的
设计与分析:
相前面几次练习,这题不仅仅是增加了选择题、多选题、填空题这些题目种类,还增添了“半对”的给分条件,除了针对这些题目的信息录入对原有的代码进行修改,还要在答案对比的时候进行一个是否符合半对条件的判断
相对于前几次的代码修改,这次的修改幅度较小,除了题目的添加条件少以外,还应该得益于之前对输入进行录入的较灵活代码作为基底
这里要注意的有半对的条件,针对如果有错误字符就视为完全错误这一点,我从答案中从每个字符开始取答题者答案的字符串长度来取得对应的字符串来进行半对的判定
在电路图这一新坑里,因该题的总电路只有一条线,结合老师给的后面并联的资料,打算先建立一个主线路类,之后再通过建立独立的并联类来实现将来对并联电路的录入和在主线路中的插入
这里要特别注意的应该是电路中开关的开闭,只考虑一条线路的话只要有一个开关是打开的整个电路就没有电流,在对总电路的电压进行计算时会起到举足轻重的作用
通过把整个电路化为StringBuffer放到一个类中,对电路的修改只要通过录入修改电路元件的字符串进行对比,复杂点的再根据修改方式进行修改就搞定了
在对电路的StringBuffer进行特定的修改时,为了代码的简洁性和易度性我试着加了类似于“工具类”的构造方法,但该方法在该方法属于的类中直接使用会出现错误,再考虑到其他类也会使用到这些方法,我新建了一个工具类,在将其作为父类的基础上,让现在及以后的子类都能够使用上该类的构造方法
跟上面所说的一样,该题增加了并联电路的录入,根据题目给的信息,我又增添了两个总电路Line的子类T_Line和M_Line来分别储存单独存在的电路和引用这些电路的并联电路,除此之外针对电路并联的录入还有新的输入方式-----【电路元件1-2 电路元件2-1 电路元件3-1】,针对这里除了采用循环一直读取到下一个类似【电路元件2-2 电路元件3-2 电路元件4-1】的数据的录入方法以外,我还采用和之前M电路(并联电路)对主电路一样的插入方法-----将并联电路用括号括起来,再通过特殊符号隔离并联中的串联电路
因该次大作业中增加了电阻和分压的概念,所以在最后对每个电路元件获得分压的计算上,针对主电路的电路元件的分压都是由总电压(若有调节器则乘以调节器调节倍率)乘以该电路元件的电阻再除以电路总电阻来得到的,针对并联电路还要增加一个是否有开关断开的判断
在该次大作业中还增加了新的电路元件---落地扇,因它的运作方式和之前设定的电路元件吊扇相似,就直接在吊扇源代码的基础上修改分压对其运作影响的部分实现了落地扇的添加
踩坑心得:
虽然之前有考虑到增加并联电路的需求,但真正在之前思路的基础上实现还是有不小的困难,为实现之前的思路,这代码是越写越长,等回顾时那代码的长度都让我不想去看。。。。。。现在想来原来的思路有点复杂,且灵活度较低,开始应该好好考虑并联电路的实现方法再写代码
因个人的做题习惯,在做该次大作业时我先粗略地把题目看一下,再把精力投到以样例为标准的代码修改之中,但在每个样例都测试通过后提交却只得了30分不到,为此纠结了好一阵子(。_。),回头仔细看了题目才发现还有另一种并联输入方法。。。。。。所以说做题前要好好看题啊(_)
在BUG方面
大多是因为没考虑到变量的数据类型或对继承的使用不熟练所导致的
其他包括但不限于
1.循环寻找对应字符串时因类似text.substring(i,i+2)时循环结束条件不应该是i<text.length(),而是i+2<text.length()的错误导致字符串查找失败
2.text.substring(j,i)的调用多了几个字符导致Integer.valueOf失败
3.题目通过的条件除了和对应的输出要求相同以外顶多允许在最后添加一个'\n',而我最后的输出里多了两个'\n',
改进建议:
第四次练习的7-1
经过多次修改,在许多或是判断,或是字符串的提取等功能的实现上有一些相似的操作,代码短一点的还行,但一但代码写得太长,在检查代码功能时该部分代码容易导致难读、错读,说白一点就是可读性太低,复杂性太高,且在整体的代码长度上会起到不小的影响
修改上可以建立新的构造方法或是新的类专门来实现重复性操作,像是读取特定字符串位置,判断字符串是否符合要求的都可以通过返回int和boolean来实现相似操作,再在这些构造方法下添加注释,这样不仅可以避免新的只为这些操作的变量的建立,还可以使代码简洁易懂,减少原代码的长度,减少该功能里代码的复杂度,以此来增加代码的可读性
第五次练习的7-1
虽然一开始感觉还行,但经过重新检查一遍,主要的Line类的构造方法还是偏多,整体的代码长度还是偏长
修改上可以把一些像change_D、change_K等针对字符串修改的构造方法放到另一个类中,再通过引用的方式来实现这些原要求的功能
第六次练习的7-1
就如之前所说,因在对并联电路的录入和分压计算上的思路不够简洁、灵活,并联电路的用括号括起来,再用特殊符号隔开线路的方法虽然在这次只有一个并联电路的大作业中行得通,但会使今后像是迭代4的包含关系等功能的实现变得较为困难
修改上可以在现有的思路上尽量往好的地方修改(感觉代码也已经回不去了(。_。))像是在并联电路的开关判断上如果一段电路的开关是断开的,则可以直接把那段电路从并联电路中删除。并在此基础上吸取教训,避免另一个大坑的创造
总结:
虽然老师说不给太多样例是为了让我们体验一下实际工作的感觉,我觉得这也蛮有道理的,但个人感觉题目还是样例给较全点较好,数量不用太多但希望种类给全,像是第六次练习的7-1中所给出的样例全都是关于并联电路 M引用串联电路 T,然后电路引用并联电路 M的形式,另一种并联电路录入【电路元件1-2 电路元件2-1 电路元件3-1】的形式却没有相应的样例,在不知道之后输入形式的情况下根据自己的猜想继续做下去(虽然最后也没得到新的分数(_))感觉有点没方向和信心
经过前三次大作业在第四次大作业填完之前的大坑,又在第五次大作业转而跳入新的大坑,在对将来功能做计划、实际功能的增添、对原代码的修改等过程中,个人感觉无论是在继承的使用的方面还是对java的类的使用方面都得到了不小的锻炼,
个人感想:
在一次又一次练习中不断认识到自己的不足并以此为重点不断锻炼自己的思路和编程技术,个人感觉这是一个充实,富有收获的过程,希望今后我也能不断改善自己的编程习惯和编程思维,在学习java这条路上走下去,走的久,走的远
标签:代码,练习,Blog,修改,电路,并联,第二次,元件 From: https://www.cnblogs.com/htzero/p/18228437