首页 > 其他分享 >第二次blog总结

第二次blog总结

时间:2024-06-07 19:56:15浏览次数:14  
标签:总结 处理 代码 作业 blog 电路 Device 第二次 输入

目录

一.前言

第四次大作业:
1.题量:这次的大作业有三道题,题量较少。
2.难度:第四次大作业的核心题目答题判题程序-4是经过了三次对第一次答题判题程序为基础的迭代而成,难度毋庸置疑,而且因为第一次总结,这次大作业距离上一次大作业也有很多天,我对我的代码也多了很多陌生的感觉,我觉得难度是大的,至少对于我来说难度是大的,我这次大作业也没有拿到多少分。觉得很遗憾,但我也会在作业后再次花时间去熟悉,去解决。
3.知识点的使用:
第四次大作业使用了以下Java知识点:
这段Java代码是一个考试系统,用于管理考试问题、学生答案、评分和输出结果。以下是代码中使用的一些关键Java知识点:
(1). 类和对象:代码定义了多个类(Question, text, Student, AnswerSheet, Main 以及内部类 wd),并创建了这些类的对象。
(2). 封装:每个类都封装了数据和行为,例如 Question 类封装了问题编号、内容、标准答案和有效性状态。
(3). 继承:虽然代码中没有显示继承的使用,但Java中的所有类都隐式地继承自 Object 类。
(4). 内部类:Main 类中定义了一个内部类 wd,用于存储一些特定的数据。
(5). 静态成员:在 Main 类中使用了静态 Map, List, Set 等来存储和管理学生、问题、答案等数据。
(6). 散列:使用了 HashMap 来利用散列实现快速查找。
(7). 数据结构:使用 MapList 作为主要的数据结构来存储和操作数据。
(8). 正则表达式:虽然代码中没有直接使用正则表达式,但在解析字符串时可能会用到。
(9). 模块化:代码被组织成多个类和方法,易于维护和扩展。

第五次大作业:
1.题量:这次的大作业有三道题,题量较少。
2.2.难度:第五次大作业是继前四次迭代大作业结束后的新的迭代式大作业家居强电电路模拟程序,新的程序项目,新的开始,这次大作业的难度相较简单,但比第一次大作业是要难的。老师也在大 作业题目上先说明了大作业
3.3.知识点的使用:
4.第五次大作业使用了以下Java知识点:
(1). 类和对象:定义了多个类(Device, Switch, SteppedSpeedController, ContinuousSpeedController, Blight, Rlight, Fan, DeviceController, Main),每个类都是一个蓝图,用于创建对象(实例)。
(2). 继承:Device 是一个抽象类,它定义了一些基本属性和方法,而 Switch, SteppedSpeedController, ContinuousSpeedController, Blight, Rlight, Fan 等类继承自 Device 类,扩展了其功能。
(3). 封装:每个类都封装了自己的属性和方法。例如,Device 类封装了设备ID、输入电压和输出电压。
(4). 多态:Device 类中的 setVoltage()display() 方法被不同的子类以不同的方式实现,展示了多态性。
(5). 抽象类:Device 类是一个抽象类,它不能被实例化,但可以作为其他类的基类。
(6). 接口:虽然代码中没有直接使用接口(interface),但是 Device 类的抽象方法可以看作是一种接口的定义。
(7). 集合:使用了 MapList 集合来存储和管理设备及其连接。
(8). 正则表达式:在 DeviceController 类的 interpretControls 方法中,使用了 PatternMatcher 类来解析控制字符串。
(9). 异常处理:代码没有显示异常处理机制,但在实际应用中,对输入电压的调整和设备操作可能需要异常处理。
(10). 方法重写:子类通过重写父类的方法来改变其行为,例如 display() 方法在不同的子类中有不同的实现。

第六次大作业:
1.题量:这次的大作业只有一道题,题量少。
2.2.难度:第六次大作业是继第五次大作业家居强电电路模拟程序的第一次迭代,虽然只有一道题,但结果就是得分的占比全部拉到了这次的核心作业:家具强电电路模拟程序-2.难度也是相较于第一次的基础难了不少。
3.3.知识点的使用:
4.第六次大作业使用了以下Java知识点:
这段Java代码演示了一个电子电路模拟系统,涉及到多个关键的Java编程概念:
(1). 抽象类:Device 类是一个抽象类,定义了所有设备共有的属性和方法,比如电压针脚、电阻和刷新设备状态的方法。
(2). 继承:Toggle, SteppedSpeedController, ContinuousSpeedController, Blight, Tlight, Fan, StandardFan 等类继承自 Device 类,实现了具体的设备行为。
(3). 封装:类封装了属性和方法,隐藏了内部实现细节,只暴露了必要的接口。
(4). 多态:Device 类中的 refreshDeviceState()displayStatus() 方法在不同的子类中有不同的实现,体现了多态性。
(5). 集合框架:使用了 List, Set, Map 等集合类来存储和管理设备对象。
(6). 泛型:集合类如 ArrayList, HashSet, LinkedHashMap 使用了泛型来确保类型安全。
(7). 异常处理:代码中没有显示异常处理,但在实际应用中,解析输入或执行操作时可能需要异常处理。
(8). 正则表达式:代码中没有直接使用正则表达式,但在解析复杂字符串时可能会用到。
(9). 方法重写:子类通过重写父类的方法来改变其行为。
(10). 并行和串行电路:SerialCircuitParallelCircuit 类模拟了电子电路中的串行和并行连接方式。

二.设计与分析:

对于第次大作业,新增加了输入选择题题目,填空题题目的分别,而且在选择题上增加了多选题的分类,导致输入方式变得多样,由于判断方法不同,第四次大作业中,我还新创建了一个判断类,专门用来判断题目类型,并且来调用特定类的判题方法。也增添了多张试卷分析。而且输入顺序也得到改变。

第四次大作业Source Monitor分析
我对第四次大作业的答题判题顺序-4 的代码进行了SourceMontor分析生成报表内容。

次大作业,我看到是有关物理的串联并联电路问题,首先应该就是先在脑子和草稿纸上模拟我们高中学过的电路问题,这样思路就明显清晰很多,建立设备类为父类,其中分控制设备的开关或者不同调速器。这个系统较为简单,只需要考虑串联就行,默认所有设备为串联链接,计算方面只要计算好各个调速器在不同电压下的开关或速度调控和电器的输入电压和输出电压之间的电压差。

第五次大作业Source Monitor分析
我对第五次大作业的答题判题顺序-4 的代码进行了SourceMontor分析生成报表内容。

次大作业
第六次大作业是第五次大作业的第一次迭代,其相较于第五次大作业,这次增加了一个新电器落地扇,其电压计算较为简单,加入到设备父类的过程也较为简单。但这次迭代最为核心的是电路增加分成为串联和并联电路,其中并联电路的计算较为复杂些,然后就是输入里的电路与电路的链接,我的想法是把电路也看作为电器原件,这样我们就能把电路作为一个元件进入到输入的要求里。

第六次大作业Source Monitor分析
我对第六次大作业的答题判题顺序-5 的代码进行了SourceMontor分析生成报表内容。

三.踩坑心得

1.第四次大作业踩坑心得:
在第四次大作业中,我对新添加的选择题中的选择和单选的判定这方面出现了问题,导致输出总是为空,我的代码的问题可能出现在我代码对字符串的处理出现了错误,在之后我询问了我的同学,向其请教,他告诉我的逻辑有很大错误,并给我发了一个简易模板,
// 处理单选题 if ("single".equals(question.getType())) { boolean result = question.checkAnswer(answer); results.put(number, result); scores.put(number, result ? testPaper.getScore(question.getNumber()) : 0); } // 处理多选题 else if ("multiple".equals(question.getType())) { String[] correctAnswers = question.standardAnswer.split(","); Set correctSet = new HashSet<>(Arrays.asList(correctAnswers)); String[] userAnswers = answer.split(","); Set userSet = new HashSet<>(Arrays.asList(userAnswers)); boolean isCorrect = correctSet.equals(userSet); results.put(number, isCorrect); scores.put(number, isCorrect ? testPaper.getScore(question.getNumber()) : 0); } }
之后我对判定方法进行重构,方法也得到了改善。

2.第五次大作业踩坑心得:
在这次电路模拟中,我出现了多个错误,第一个就是在吊扇转速的计算时没有考虑double的精度导致了电压无法正确分压,从而导致四舍五入时产生偏差导致整个“开关-吊扇”的测试点无法通过。

class Fan extends Device{
private int speed;

public Fan(String id) {
    super(id);
    this.speed=0;
}
public void setVoltage()
{
    double diffv = Math.abs(pin1Voltage - pin2Voltage);
    updateOutput(diffv);
}
public void updateOutput(double volege)
{
    if (volege < 80) {
        speed= 0;
    } else if (volege > 150) {
        speed = 360;
    } else {
        speed = 80 + (int) (((360.0 - 80) / (150.0 - 80) * (volege - 80)));
    }
}
public String display()
{
    return "@" + id + ":" + speed;
}

}
还有就是我的字符串处理我尝试使用正则表达式去处理字符串,但输入样例后输出为空,到最后发现是正则的符号判定我写错了。

3.第六次大作业踩坑心得:
第六次大作业的测试点是没有说明的,我这次大作业也做得很是粗心,没有认真考虑每一个细节,第一个就是因为在上一个大作业的错误下,我没有完善优化开关的状态改变,导致我输入后的输出是错误的。第二个就是排序的问题,没有考虑到输出的顺序,导致输出的上下是倒置输出,后来增加了输出的排序后,输出得到改善。

最后的输出还有一个问题就是每次输出的数值都是0。
比如输入样例2,输出应该是@K1:closed @K2:turned on @L1:1.00 @D1:0 @D2:200 @D3:200但是输出后的结果D2和D3的数值为0。因为时间的问题,我这个问题还是没有得到确切的解决,但我猜测是并联电路的字符串处理后的计算出现了问题。

四.改进建议

  1. 代码结构优化:我的代码因为自身想的逻辑太过于复杂,没有找到简易的代码思路导致代码太长,结构多余复杂凌乱,我希望我以后能够确保代码结构清晰,模块化,遵循面向对象编程原则。可以考虑引入设计模式来简化代码并提高可维护性。
  2. 异常处理:加强异常处理机制,确保系统在面对异常情况时能够优雅地处理,并给出相应的提示信息让用户能够理解发生了什么问题。
  3. 性能优化:查找并消除可能存在的性能瓶颈,优化算法和数据结构以提高程序的运行效率。
    4.功能扩展:每一次的代码都是临时抱佛脚,导致每一次迭代做的都很复杂费时间,没有进一步考虑代码的后续书写,我希望我以后能够考虑是否有进一步的功能扩展空间,可以在原有功能基础上进行创新和扩展,使代码更具吸引力和实用性。
    5.我应该在写代码之前提前先构思好这一次大作业的基本思路,模拟实际上的作业要求,比如预先模拟好实际电路的构造,去思考逻辑,代码架构,需要画好类图,否则写代码时就会出现调用关系不清晰等问题。

五.总结

收获:
面向对象编程(OOP)的应用:通过设计和实现 Device 类及其子类,您加深了对面向对象编程中类和对象的理解,学会了如何使用继承和多态性来构建代码。
电路理论的实际应用:在模拟电路行为时,您可能对电路的基本概念,如电压、电流、电阻和功率等有了更深入的理解。
数据结构和算法:在处理电路连接和设备排序时,您可能使用了不同的数据结构(如列表、集合)和算法(如排序),这有助于提高您的算法设计能力。
正则表达式的使用:通过使用正则表达式来解析输入,您可能提高了对字符串处理和模式匹配的理解。
代码组织和模块化:将功能提取为方法,您可能学会了如何组织代码,使其更加模块化和可维护。
问题解决技巧:在解决编程中遇到的问题时,您可能锻炼了调试和问题解决的能力。
自主学习:在完成作业的过程中,您可能需要自学新的编程概念或技术,这增强了您的自主学习能力。

不足:
代码重用性:在代码中可能存在重复的逻辑,这表明需要进一步提高代码的重用性,例如通过创建更通用的方法或工具类。
输入验证:如果代码中没有充分的输入验证,这可能导致程序对错误或异常输入的鲁棒性不足。
异常处理:代码可能缺少异常处理机制,这在实际应用中可能导致程序崩溃或不正确的行为。
性能优化:随着电路规模的增长,性能可能成为问题。代码可能需要优化以提高效率,特别是在处理大规模数据时。
文档和注释:每次回头看代码都会有一种陌生感,代码中缺少足够的文档和注释,这可能会影响我代码的可读性和可维护性。
设计模式的应用:在解决某些问题时,可能没有充分利用设计模式来提高代码的灵活性和可扩展性。

标签:总结,处理,代码,作业,blog,电路,Device,第二次,输入
From: https://www.cnblogs.com/glyxxsc/p/18237766

相关文章

  • Mysql阶段二总结
    Mysql阶段二总结文章目录Mysql阶段二总结左外连接右外连接合并查询数据纪录子查询当我们在查询数据时,要求返回所操作表中至少一个表的所有数据记录,通过SQL语句“OUTERJOIN…ON”来实现。外连接数据查询语法形式如下:SELECTfield1,field2,…,fieldnFRO......
  • [设计模式 1] 设计模式笔记(大话设计模式总结)
    设计模式总结(java版1)1.简单工厂模式需求:设计一个计算器,有一个抽象的运算类,他里边有两个数字属性和一个getResult()抽象方法,这个类被四个加减乘除的具体的算法类继承,然后有一个简单工厂类,这个简称工厂类是用来生成一个具体的运算类的,然后就在简单工厂类里有一个逻辑的判......
  • Chroium 源码目录结构分析(3):目录和模块总结(src根目录部分)
    上一篇,我们通过脚本对主要的两个目录进行信息统计和提取,由于提取的内容过多不便于直接阅读,因此我们使用AI帮我们总结。提示词:你是chromium项目的专家,专业的软件工程师。这分文档是google的chromium开源项目的目录结构和对应目录模块的readme的摘要,请你根据文档内容,依次总......
  • PTA三次题目集总结-第二次blog
    以下内容是我对pta题目集4-6次大作业的总结nchu-software-oop-2024-上-4本次作业新增内容:1、输入选择题题目信息题目信息为独行输入,一行为一道题,多道题可分多行输入。格式:"#Z:"+题目编号+""+"#Q:"+题目内容+""#A:"+标准答案格式基本的约束与一般的题目输入信息一致。新......
  • 第二次Blog
    (1)前言:智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境......
  • 用 Python 撸一个 Web 服务器-第9章:项目总结
    项目总结本教程带大家一起实现了一个TodoList程序,包含基础的增删改查功能,和用户登录认证。这也是Web开发中最常见的需求。我画了一张思维导图,帮助你从宏观的角度来概览TodoList程序,加深你对Web开发的理解。TodoList项目整体思路参考MVC设计模式。有意设计utils......
  • chattts最强对手-实时流库PaddleSpeech的最新落地经验总结(不看后悔)
    PaddleSpeech是由百度飞桨(PaddlePaddle)团队开发的一个开源的语音技术框架,支持音频分类、语音翻译、语音识别、语音合成、声纹识别等任务,可以做到工业级端到端的流式ASR和TTS服务。开源github地址:https://github.com/PaddlePaddle/PaddleSpeech。一、环境安装1、python环境:为......
  • 第二次Bolg
    (1)前言:这几次的大作业的包含了String类的使用和各种String的处理方法,包括字符串按照正则表达式查找和切割。以及很多新知识点,包括类的封装,继承和多态,其中继承可以说是贯穿整个程序,继承可以让程序简单易读,好修改,而这个还要求进行一个复杂性很高的排序,所以还用到了TreeMap集合进......
  • 微信小程序学习总结——①
    一、小程序代码的构成1.了解项目的基本组成结构①pages用来存放所有小程序的页面②utils用来存放工具性质的模块(例如:格式化时间的自定义模块)③app.js小程序项目的入口文件④app.json小程序项目的全局配置文件,包括了小程序的所有页面路径、窗口外观、界面表现、底......
  • 微信小程序学习总结——③
    三、小程序的视图与逻辑1.页面导航①页面导航指的是页面之间的相互跳转。例如,浏览器中实现页面导航的方式有如下两种:Ⅰ.<a>链接Ⅱ.location.href②小程序中实现页面导航的两种方式Ⅰ.声明式导航。在页面上声明一个<navigator>导航组件通过点击<navigator>组件......