第4-6次大作业BLOG

news/2024/10/9 2:22:31

目录
  • 前言
  • 第四次大作业blog
    • 设计与分析
    • 踩坑心得
    • 改进建议
    • 总结
  • 第五次大作业
    • 设计与分析
    • 踩坑心得
    • 改进建议
    • 总结
  • 第六次大作业
    • 设计与分析
    • 踩坑心得
    • 改进建议

前言

第四次作业考察了我们list和map的使用,以及对正则表达式的掌握情况,类的设计与方法的使用,第五次作业和第六次作业是电路模拟,需要一定的物理电学知识。总体来说第四次和第六次作业较难,第五次作业相对容易。题量:第四次和第五次题量适中,第六次作业题量较少。

第四次大作业blog

设计与分析

第四次大作业在上一次的基础上增加了多选题和填空题,本次作业需要存储的信息很多,我用了很多个map和list才完成存储,新增了两个map分别用于存储多选题和填空题的题目,答案仍然存在原来的lsit中。由于每种题目所存的map不同,所以在本次作业中新增了一个属性用于判断题目的类型,使用了map.containsKey()方法判断每个map中是否含有某个key。
本次作业还使用了继承,新增的多选题和填空题和原来的题目所包含的属性基本相同,所以可以直接继承。多选题的多个答案用split方法以空格分开存到数组里,然后再分别遍历答案数组和标准答案数组,判断他们的内容与长度,便可判断是正确、错误还是部分正确。
填空题则是使用matches方法判断答案与标准答案是否有相同元素,如果没有则可以直接判断错误、,如果有相同元素再使用equals方法判断两个字符串是否相同,若相同则全部正确,否则部分正确。

踩坑心得

在继承的使用过程中不太熟悉,经常出现问题。

改进建议

1、类的划分:目前代码中有很多类,但是它们的划分并不清晰。
2、代码的冗余:有些代码是重复的,可以考虑抽象出来成为公共的方法。
3、异常处理:在输入解析和数据处理过程中,应该加入异常处理机制,以防止非法输入或数据处理过程中的错误。

总结

本次作业难度相当大,我花了几乎所以的时间来写这道题,幸好最后写出来了,之前的努力也都没白费。通过这次作业我深刻了解了继承的用法以及继承带来的好处。通过继承,子类可以继承父类的属性和方法,使得代码的编写变得更加简洁和高效。
1、代码复用:继承允许子类使用父类的代码,而不是每次都从头开始编写相同的代码。这增加了代码的复用性,减少了代码冗余,使得程序更加简洁和易于维护。
2、抽象和扩展:继承有助于实现抽象和扩展功能。通过继承,可以抽取出父类中的共性,形成子类,子类可以在此基础上增加新的功能或对已有功能进行扩展。
3、提高代码的可重用性:子类可以继承和扩展父类的方法和属性,使得代码具有较高的可重用性,这有助于减少代码量,提高代码的执行效率。
4、降低代码的耦合度:通过继承,可以让代码的耦合度降低,提高代码的灵活性和可维护性。子类通过继承父类,可以将父类的方法和属性组合起来,形成自己的方法,这样减少了代码之间的耦合关系,使得代码更易于理解和维护。

第五次大作业

设计与分析

第一次的电路模拟程序,我写了一个父类,这个是所有的电路元件,包括串并联的父类然后灯泡类和风扇类继承这个父类,具体的灯泡和风扇继承上面所写的灯泡类和风扇类。但是我第一次作业没有写串联类,将在第二次作业中补上。
第五次大作业我分为三步,首先是对输入的读取和存储,然后判断各个软件包括开关,调速器,灯泡和风扇的状态,最后是计算他们分别的电压并且输出结果。输入的读取我还是跟上次的大作业一样,用正则表达式来匹配输入的字符串,然后再用多态的方法创建了一个声明类型为最大父类,实际类型为他们本身的类的对象,并且将这个对象存入hashmap中。后面的开关和调速器的输入我先匹配他们是什么类型,然后再判断map里面有没有这个对象如果有的话,开关就相对应的加一个档位或者减一个档位,调速器就读取它们的档位并且存起来。输入完成后从map里面循环找分别找到开关,分档调速器和连续调速器,获取他们的档位求出相对应的电压。在每个子类中写出根据题目要求计算出对应电压所对应的亮度和转速的方法。排序输出的话,在父类中分别将kflbrd对应为543210。父类中重写compare to将每一个元件进行排序。然后从Map 对象中获取所有的值,然后把这些值转换成一个 Cir 类型的列表。这个列表将包含 Map 中所有值的 Cir 对象。假设 Cir 是一个自定义的类或者一个枚举类型。最后按照顺序输出。
在写这道题目的过程中,我没有考虑到最后输出要按照题目所给的要求排序后再输出,所以在这个问题上我没有考虑周全,最后出了错误。并且在存储输入信息时,没有首先想到用hashmap来存储,走了很多弯路。

踩坑心得

1、开始没有设计总的父类,在后续的过程中思路混乱,代码复杂,后来老师发了类图,设计了总的父类,相对来说能够简化代码,并且提高代码的可复用性。
2、没有仔细阅读题目,没注意到要排序输出,因此在后面总是有测试点过不了。

改进建议

1、添加一个串联类,以便在后续的迭代中可以直接使用,不需要重新设计串联与并联类。
2、将电压的计算放在每个类中的方法里,简化main方法,提高代码的可复用性。

总结

本次作业是第一次迭代,题目难度不算很大,我在分析题目输入方面有待提高。

第六次大作业

设计与分析

第六次大作业在上一次作业的基础上加入了并联电路。所以在这次作业中我分别写了串联类和并类继承父类。是作业的输入也相较于上次作业发生了比较大的变化。上次作业是一条串联分多行输入,而这次作业是一条串联一行输入。因此这次作业的正则表达式与上次有所不同。不过我也还是按照上次的方法先对每个中括号中的元素用空格分隔开存入数组中,然后再判断他们的类型。这样输入一条串联时就要用到循环。并联电路中是两条串联电路,在并联类中写了一个串联类的array list,存储并联中的每条串联,包括他们的名字和串联电路中的元件。输入时,我根据串联电路的最后来判断是并联中的子串联还是整个电路的总串联。电路中的信息输入完成之后,我也是按照与上一次作业一样的方法来判断电路中的开关和调速器的档位,并将他们的档位记录下来。这次作业比上次多作业还多了一个电路元件落地扇,落地扇的信息与吊扇一样,输出中也将每一种电器元件按照数字的方法来将它们排序输出。不过这次作业中的计算电压和电阻对我来说是一个难点。计算电压的过程中,我将每一个电路元件每一条串联电路和并联电路中的串联电路中的原件单独计算他们的电压。这种方法显得非常地复杂冗余,在以后的作业中我将会把电压的计算写在串联和并联类的中的一个方法里,然后直接在main方法中调用这些方法,这样能极大的简化代码的复杂程度。

踩坑心得

1、开始时没有仔细分析题目,跟第五次一样直接用map存储数据,后来发现本次作业相较于上次作业新增了很多内容,无法直接用map存储,因此经过仔细的分析和与同学的讨论,使用map与list共同存储,解决了之前碰到的问题。
2、第六次大作业的输入也与上次作业有所区别,本次作业的串联是一行输入,而上次是分多行输入,因此本次作业的输入不能与上次相同,而我刚开始与上次相同,因此总是非零返回。并且在这次作业的正则表达式匹配过程中也遇到了困难。
3、在输入过程中map元素的添加放错了位置,导致后来出现了一些问题。

改进建议

计算电压的部分过于复杂,并且出现错误时很难发现

点击查看代码
for (int i1 = 0; i1 < vcc.getList().size(); i1++) {if(vcc.getList().get(i1).getName().startsWith("M")) {for(int i2 = 0;i2<((Parallel)vcc.getList().get(i1)).getList().size();i2++) {if(((Parallel)vcc.getList().get(i1)).getList().get(i2).state){for(int i3 = 0;i3<((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().size();i3++) {if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("D")) {double U1 = vcc.getList().get(i1).dz/dz2*U;((D)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(U1*((D)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).dz/((Parallel)vcc.getList().get(i1)).getList().get(i2).dz);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("A")) {double U1 = vcc.getList().get(i1).dz/dz2*U;((A)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(U1*((A)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).dz/((Parallel)vcc.getList().get(i1)).getList().get(i2).dz);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("B")) {double U1 = vcc.getList().get(i1).dz/dz2*U;((B)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(U1*((B)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).dz/((Parallel)vcc.getList().get(i1)).getList().get(i2).dz);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("R")) {double U1 = vcc.getList().get(i1).dz/dz2*U;((R)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(U1*((R)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).dz/((Parallel)vcc.getList().get(i1)).getList().get(i2).dz);}else {}}}else{for(int i3 = 0;i3<((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().size();i3++) {if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("D")) {((D)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(0);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("A")) {((A)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(0);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("B")) {((B)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(0);}else if(((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3).getName().startsWith("R")) {((R)((Parallel)vcc.getList().get(i1)).getList().get(i2).getList().get(i3)).cul(0);}else {}}}}}else if (vcc.getList().get(i1).getName().startsWith("D")) {double U1 = vcc.getList().get(i1).dz / dz2 * U;((D) (vcc.getList().get(i1))).cul(U1);} else if (vcc.getList().get(i1).getName().startsWith("A")) {double U1 = vcc.getList().get(i1).dz / dz2 * U;((A) (vcc.getList().get(i1))).cul(U1);} else if (vcc.getList().get(i1).getName().startsWith("R")) {double U1 = vcc.getList().get(i1).dz / dz2 * U;((R) (vcc.getList().get(i1))).cul(U1);} else if (vcc.getList().get(i1).getName().startsWith("B")) {double U1 = vcc.getList().get(i1).dz / dz2 * U;((B) (vcc.getList().get(i1))).cul(U1);}else{}
所以我将这段又长又臭的代码写成了方法放在类,直接在main方法中调用即可。 在串联类中计算电压的方法:
点击查看代码
public void culU(double U){double U1;for(int i = 0;i<list.size();i++){if(list.get(i) instanceof A){U1 = (A)list.get(i).dz/dz*U;((A)list.get(i)).cul(U1);}else if(list.get(i) instanceof B){U1 = (B)list.get(i).dz/dz*U;((B)list.get(i)).cul(U1);}else if(list.get(i) instanceof R){U1 = (R)list.get(i).dz/dz*U;((R)list.get(i)).cul(U1);}else if(list.get(i) instanceof D){U1 = (D)list.get(i).dz/dz*U;((D)list.get(i)).cul(U1);}else if(list.get(i) instanceof Series){U1 = (Series)list.get(i).dz/dz*U;((Series)list.get(i)).culU(U1);}else if(list.get(i) instanceof Parallel){U1 = (Parallel)list.get(i).dz/dz*U;((Parallel)list.get(i)).culU(U1);}}
}
并联电路中计算电压的方法:
点击查看代码
public void culU(double U){for(int i = 0;i<list.size();i++){((Series)list.get(i)).culU(double U);}}
Main方法中调用方法计算电压: vcc.culU(U1); 这样写不仅简便易懂,还不容易出错,代码的可复用性极强。 ##总结 这次大作业难度挺大,我花了好长时间才写完,期间还找人帮忙改了bug。 但是通过这次大作业我也学到了很多东西,明白了方法的好处,代码的可复用性的重要性。![](https://img2024.cnblogs.com/blog/3432660/202406/3432660-20240609142947147-989243710.png) 1788073502.png)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/42475.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

第二阶段PTA总结

前言 本阶段面向对象程序设计又进行了三次PTA训练,第一次(总第四次)还是接续上轮训练的试卷判分系统的程序设计,后两次都是新的电路设计训练题目。相对来说,第二次电路设计的第一次练习最为简单,第一次和第三次相对复杂。在这个阶段,我已经适应了PTA训练的题量和训练模式…

python-数据分析-Numpy-2

数组对象的方法应用 # -*- coding: utf-8 -*- #数组对象的方法 import matplotlib.pyplot as plt import numpy# 1、 获取描述统计信息 array1 = numpy.random.randint(1, 100, 10) print(array1) #随机数组 [64 84 10 52 3 66 4 31 79 7]#计算总和、平均值、中位数 pri…

数据结构之跳表

原始论文: https://15721.courses.cs.cmu.edu/spring2018/papers/08-oltpindexes1/pugh-skiplists-cacm1990.pdf 基本原理 跳表的查找与插入:代码实现 未完成,待续。。。。

PTA训练集阶段总结blog

这次是4-6次的pta作业的一个总结性blog目录PTA训练集总结blog1.前言2.设计与分析题目集一 7.4 答题判题程序四关于设计要求:UML类图及设计分析:部分源码:复杂度分析:题目集五 7.1 家具强电电路模拟系统—1关于设计要求:UML类图及设计分析:部分源码:复杂度分析:题目集六…

Redis-6-三种缓存读写策略

2.1 旁路缓存Cache Aside Pattern(旁路缓存)适合读请求比较多的场景Cache Aside Pattern 中服务端需要同时维系 db 和 cache,并且是以 db 的结果为准。 2.1.1 写先更新db 直接删除缓存2.1.2 读先读缓存有,则从缓存返回。 没有,从db中读取返回。再将读取的数据写入缓存2.1.…

PTA4~6次作业总结

(1)前言: 不同于大一上的c语言的PTA作业,java的PTA作业越来越贴近生活中的需求,难度也越来越大了,代码的设计量和题目考察的知识点也是.最后一次作业没有给测试样例,导致有几个点没过,不知道错哪了,测不出来,非常的难受. 这次作业使用了ArryList 先了解下ArryList ArrayList…

构建和谐网络环境:AI敏感词屏蔽技术的应用与挑战

在当今信息爆炸的时代,网络空间的信息安全和言论自由之间的平衡成为了一个重要议题。为了维护网络环境的健康发展,一种能够自动屏蔽敏感词的AI技术应运而生。本文将结合“智谱清言”的智能体“净言”为例,探讨AI敏感词屏蔽技术的应用及其面临的挑战。 一、AI敏感词屏蔽技术的…

Ubuntu基础环境配置

博主:Agony‍ 下载ubuntu地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/选择你所需要的版本下载即可‍ root设置ubuntu系统搭建好之后‍打开终端。输入以下命令来切换到root用户(如果您当前用户有sudo权限): sudo su或者,如果您已经有了root用户并知道密码…