题集7~8的总结

我的第三次博客~~~🔢


目录:  1.前言

            2.设计与分析

           3.踩坑心得

           4.改进建议

           5.总结


1.前言


①7~8题目集的知识点:

  • 类与类之间的关系
  • 题目设计思路的采取,需思索采用恰当的设计思路
  • 题目的理解
  • 多个类的处理

② 题量

    这两次题集一题集都只有一题,题量少。

③ 难度

    第七次题集,对比上次题集,只是增加了一种受控设备窗帘,一种控制设备互斥开关。受控设备窗帘很好加,像其他受控设备一样,多加个类。控制设备互斥开关就有点难度了,有三根引脚,还能正接和反接,看外观像是俩个开关合起来,接不同的线的电阻也不同,需要考虑很多很多不一样的情况,需要记录各种信息,因为在不同的地方可能会要用到。总之需要非常细心。对于增加的不多,并且还是不需要用到设备引脚,完成还是可以滴。😇😇😇😇😇

     第八次题集,只有一题--家居强电电路模拟程序-4,刚看到题目的时候,非常震惊啊,要输出引脚信息!!!,在之前的迭代中,我根本没有用到过设备的引脚,因为这个引脚我不太会用,不知道如何运用,所以我采用计算电阻来分配电压的方法来计算亮度、转速。思路清晰的我一下子懵住了!!!最后一次的迭代放大招了我天呐~~~写不了一点!!!🤑🤑🤑🤑🤑   不仅 增加管脚电压的显示,其他的增加还有:电流限制,短路检测,二极管,并联电路中包含并联。一下子加的太多了!!!!

没关系的~我会自己心碎~~~🤡🤡🤡🤡🤡


2.设计与分析


  • 家居强电电路模拟程序-3

复杂度一个比一个高!!

(类图设计):

 

       互斥开关真的是需要记录很多东西,代码在不断的增加,类也在不断地增加,这次迭代我发现了我的一些负责的代码可以简单化,效果是一样的,去掉了很长的一大部分。

 

  • 家居强电电路模拟程序-4

(类图设计):

       这次迭代增加了很多东西,我也增加了三个类,每个类之间的关系明显没之前掌握了,改到后面基本上都是乱改了,这次居然其他的设备也有可能反接,所以我还多加了几个属性。很显然,这次迭代不太可能通过全部测试点了,到后面就是一通乱改,还剩了一堆测试点没过。首先我的思路就不太对,一会加一点,一会加一点,有一次,我花了大半天的时间大改了一下,结果还报错,到头来还是用的自己原来的。我颠呐~~~~~~😂😂😂😂😂

 


3.踩坑心得


  • 非零返回:数组越界问题---常见问题:数组遍历时访问了指向null的对象,或者超出下标

          解决方法:用eclipse调试运行后能给出出错的具体位置,然后对症下药就行啦。

第7次题集这种错误几乎没啥(印象中),第8次题集真的最后一刻乱改后蹦出个非零返回的时候,我真的无所下手,那就算了吧~~~,臣妾爱莫能助啊~~~

  • 代码设计思路的恰当选择:当时在家居强电电路模拟程序-1的时候,看不懂设备的两根引脚干嘛用的,后面写家居强电电路模拟程序-2这道题目的时候,彻底抛弃了引脚这一部分,所以当家居强电电路模拟程序-4要显示各个设备的引脚的时候,我就知道我这方法不太行了,指定过不了。还是缺少对题目的理解,写题的方法太少啦,不能很好的贴合题目去做题。到现在我也不太知道该怎么去设计这道题的类,设置什么变量参数去,如何设置引脚参数。
  • 答案错误: 对一些特殊情况的处理不对,答案有错误,实际上我觉得就是对情况的分类不准确,有些特殊情况想不到。

       后面新增的测试点根本不知道是什么特殊情况,太伤脑筋了!!!最后还是放弃啦哈哈哈。。。🤣🤣🤣🤣

  • 一些逻辑错误:

     第一:一开始我的匹配模式是:(K|F|L|B|R|D|A|M|H|S|T|P)(\\d+)-(1|IN),一旦检测到有这个部分就会创建,但是对与互斥开关有个特殊情况,它在俩条串联支路上都会出现一个H(\\d+)-1,所以会创建两个互斥开关,导致输出的时候,会输出俩个H1,所以我需要加上一些判断语句。

			int check = -1;
			for (int j = 0; j < mutexswitches.size(); j++) {
			    if (mutexswitches.get(j).number.equals(m.group(2))) {
			        check = 1;
			        e = mutexswitches.get(j); // 记下这个
			        break;
			    }
			}
			if (check == -1) { // 不重复创建同一个互斥开关
				e = new Mutexswitches(m.group(2));
				mutexswitches.add((Mutexswitches) e);
				Pattern zf = Pattern.compile("H"+m.group(2)+"-(1|2|3)"); // 新建了的才要记录正反性,未新建的已经记录好了。
				Matcher mzf = zf.matcher(sb.get(i));
				if (mzf.find()) {
				((Mutexswitches) e).setCheckzf(mzf.group(1));
					}
			}

这样子就不会重复创建啦!!!!

    第二:我添加串联类的时候,添加设备时,第一条含有H1的路才会把H1添加进去,第二条含有H1的路不会添加这个设备,导致我在输入某些样例的时候,遍历到第二条路的时候会出现找不到这个设备的时候,无法进行下一个操作,我这才明白,应该在每条路上都绑上这个相同的设备,后面因为还需要对H1接通的路线进行明确,我还得在创建的时候,明确它二号引脚和三号引脚分别绑定了哪条串联支路,又让我加了俩组匹配模式。有了迭代三的经验,在迭代四增加二极管的时候,我也会提前在创建的时候做好这些准备。

    第三:在迭代四中,我通过输入测试点等样例发现,如果在一条串联电路中,它既含有小串联部分或小并联部分,如果它这条路上不在小串联或小并联路上有设备使路断开的话,要将小串联对联的串联类设置成断开状态,也要将小并联对应的并联类中的每个串联支路设置成断开状态,不再计算电阻、电压!!,这是在迭代四之前所没能考虑到的,显示出之前代码的不完备。

     第四:这个是迭代四难道我的很大一点:我在写代码的时候真的很难写这一部分:并联最后的输出引脚电压要和并联每个串联支路的输出引脚的电压相同,这意味这如果并联中有串联支路是断开状态的话,你要找出来,因为他的输出引脚会是0,根据我之前的思路,我要改动必须要找出这条路的最后一个设备的靠近这条路的那根引脚(设备有正反接的情况出现的可能性)重新设置成相同的输出电压。。。。太难找了,主要是要是这条路上设备不只是一个,我还要全部找出,全部重新设置电压,引脚电压,因为路断开,所有设备的引脚电压只可能是这条电路的输入引脚和输出引脚!!!跟我之前太不一样了,要改动太多,就不知从何改起!!!🧐🧐🧐🧐🧐

     第五:这个题目要求我是真没看懂,二极管:1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。 2、如果两端电压不为0,二极管导通。,只能说题目没咋懂,我是真不会一点,这个二极管加的我心碎碎😑😑😑😑😑😑

这个第二条的特殊情况,我想的是在有条断开电压为零的并联部分是才能做到二极管俩端电压相等且不为零,或者是并联部分有条串联支路电阻为零,导致并联部分被短接,两边电压不为零且相等,别看这么想,但是很难实现啊!我天!人生就是白干加白干!

     第六::由于我把成员比变量设置成了共有的public,并没有设置成私有类型private,我习惯性直接用类.R来得到电阻,但有些受控设备,像二极管和互斥开关,他们的电阻根据状态会有区别,直接用类.R来得到电阻会得到不是那么准确的电阻在他们状态改变的时候,这使我增加了几次调试去找出这个错误。。。😑😑😑😑😑

 


4.改进建议


 

  • 类中的成员变量应该改为私有,使用private,并设置相应的get和set方法。注重代码的规范性。

将所有成员属性设置为私有优点:可以自己控制读写权限;对于写权限,我们可以检测数据的有效性。即通过if判断输入是否是正确的。

因为这里是写题目,我为了方便处理,并没有把成员变量设置成私有,能减少的get和set方法也都省略了,这对于以后写代码总归是留下了不好的习惯,以后要多加改正,提高写代码的规范性,而不是为了写题而写代码。

这个问题当然是还没有解决了,因为把成员变量设置成共有我也更好拿到,但是也是会出现一些小错误。这时候就凸显出他的优点了

  • 代码的复杂性,这次写迭代我发现我有几处代码复杂化了可以使用少量的代码代替,实现相同的功能。下面就是一个小小的栗子~~~

这一下代码精简了不少,也更好阅读了。

我的最后一次代码漏洞太多了,到后面自己也乱了阵脚,不太知道自己改的是什么了。最后一次,认识到了自己还需改进自己写代码的能力,还需多多提高!!加油加油!!🤪🤪🤪🤪🤪🤪


5.总结


    首先,通过这俩次题集,我认识到我还是不够细心,考虑不周全,有很多特殊情况并没有发现,在之后的学习中,我需要更加完善,提高自己的能力,继续加油!!!

    其次,通过写这俩次题集,我收获良多:

  • 对题目的理解至关重要,不理解不了解要写的代码模型是写不了一点的!!!
  • 代码的漏洞多不可侥幸,总有一次迭代会吃亏。还带改进!!!
  • 我使用eclipse进行调试,能查出数据的错误,找到逻辑问题出错点,so good!

    然后,以下是我总结出来还需进一步学习和研究的地方:

  • 尽量减少代码复用部分

好的代码应该是简洁,复用性低的,这一点有待改善哦😁😁😁

    最后,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见,我有:

  1. pta都全部写完了,老师可不可以放出答案来给我们解解惑啊~~~~~~
  2. pta 测试样例能不能多设置几个!!! 样例多来几个也能帮助我们更好的理解题意啊啊啊啊啊~~~

好啦!我的第三次博客就写到这里!!!!撒花!!!💯