java第7-8次题目集blog

1.前言
本次blog主要是题目集7-8的总和,家居强电电路模拟程序
题目集7
知识点:类和对象的使用,继承,正则表达式,HashMap<>,LinkedHashMap<>,List<>数据结构,电路基础理论。
题量:题目数为1题。
难度:难。
题目集8
知识点:抽象类的使用,继承,正则表达式,Map<>,二维数组,电路基础理论。
题量:题目数为1题。
难度:难。
2.设计与分析
家居强电电路模拟程序-3是一个模拟智能家居中强电电路的系统,它能够模拟开关、分档调速器、连续调速器、白炽灯、日光、吊扇、互斥开关、受窗帘等设备的行为。该程序通过接收输入信息来模拟电路的连接和设备的状态变化,并输出每个设备的状态。
CircuitDevice 类(抽象类)
属性:
id:设备标识符,用于唯一标识一个设备。
inputVoltage:设备的输入电压。
resistance:设备的电阻值。
方法:
updateState(String command):抽象方法,用于根据控制命令更新设备的状态。
getState():抽象方法,用于获取设备当前的状态。
setInputVoltage(double voltage):设置设备的输入电压。
getResistance():获取设备的电阻值。
getId():获取设备的唯一标识符。
isOpen():判断设备是否处于开路状态。
Switch 类(继承自 CircuitDevice)
属性:
isClosed:表示开关是否闭合。
方法:
updateState(String command):切换开关的开闭状态。
getState():返回开关的当前状态(开或闭)。
getResistance():根据开关状态返回电阻值,闭合时为0,断开时为无穷大。
ToggleSwitch 类(继承自 CircuitDevice)
属性:
isToSecond:表示互斥开关当前是否接通第二个分支。
方法:
updateState(String command):切换互斥开关的接通分支。
getState():返回互斥开关的当前状态(接通或断开)。
getResistance():根据互斥开关状态返回电阻值。
SteppedRegulator 类(继承自 CircuitDevice)
属性:
level:分档调速器的当前档位。
LEVELS:分档调速器的电压级别数组。
方法:
updateState(String command):根据控制命令调整档位。
getState():返回分档调速器的当前档位。
ContinuousRegulator 类(继承自 CircuitDevice)
属性:
level:连续调速器的当前档位参数。
方法:
updateState(String command):根据控制命令设置档位参数。
getState():返回连续调速器的当前档位参数。
IncandescentLamp 类(继承自 CircuitDevice)
方法:
getState():根据输入电压返回白炽灯的亮度。
FluorescentLamp 类(继承自 CircuitDevice)
方法:
getState():根据输入电压返回日光灯的亮度。
CeilingFan 类(继承自 CircuitDevice)
方法:
getState():根据输入电压返回吊扇的转速。
FloorFan 类(继承自 CircuitDevice)
方法:
getState():根据输入电压返回落地扇的转速。
Curtain 类(继承自 CircuitDevice)
方法:
getState():根据输入电压和总光照强度返回窗帘的打开比例。
MutualSwitch 类(继承自 CircuitDevice)
属性:
activeBranch:当前接通的分支。
方法:
updateState(String command):切换互斥开关的接通分支。
getState():返回互斥开关的当前状态。
Circuit 类
属性:
devices:存储所有设备的映射。
serialCircuits:存储所有串联电路的映射。
parallelCircuits:存储所有并联电路的映射。
方法:
addDevice(CircuitDevice device):添加设备到电路中。
addSerialCircuit(String info):添加串联电路。
addParallelCircuit(String info):添加并联电路。
updateCircuit():更新电路状态,包括电压和电流限制检查。
executeCommand(String command):执行控制命令。
getStates():获取所有设备的状态。
checkShortCircuit():检查电路是否存在短路。
checkCurrentLimit():检查电流是否超过限制。
主程序流程
初始化电路系统:
创建 Circuit 类的实例,该实例将管理整个电路系统,包括所有设备和电路连接。
读取输入:
使用 Scanner 类实例从控制台或其他输入源(如文件)读取输入数据。
持续读取输入,直到接收到特定的结束标志(如 "end")。
解析输入数据:
将输入数据存储在 List 集合中,便于后续处理。
遍历输入数据列表,根据输入行的类型(如以 "#T" 或 "#M" 开头)分别处理串联和并联电路连接信息。
处理电路连接:
对于每条串联电路信息(以 "#T" 开头),调用 Circuit 类的 addSerialCircuit 方法添加串联电路。
对于每条并联电路信息(以 "#M" 开头),调用 Circuit 类的 addParallelCircuit 方法添加并联电路。
执行控制命令:
再次遍历输入数据列表,识别并执行控制命令(以 "#" 开头,但不是电路连接信息的行)。
对于每个控制命令,调用 Circuit 类的 executeCommand 方法更新相应设备的状态。
更新电路状态:
调用 Circuit 类的 updateCircuit 方法,根据设备状态更新电路的电压分配,并进行短路和电流限制检查。
输出设备状态:
调用 Circuit 类的 getStates 方法获取所有设备的状态信息。
遍历状态信息列表,将每个设备的状态输出到控制台或写入到输出文件中。
错误处理:
如果在任何步骤中检测到短路或电流超过限制,输出相应的错误信息,并根据需要停止程序或跳过后续操作。

家居强电电路模拟程序-4在家居强电电路模拟程序-3的基础上进行了扩展,增加了二极管,这个程序能够更全面地模拟智能家居中的强电电路行为。
CircuitDevice 类(抽象类)
职责:定义电路中设备的基本属性和方法。
属性:
id:设备的标识符。
inputVoltage:设备的输入电压。
resistance:设备的电阻值。
maxCurrent:设备能承受的最大电流。
方法:
updateState(String command):根据控制命令更新设备状态。
getState():获取设备当前的状态。
setInputVoltage(double voltage):设置设备的输入电压。
getInputVoltage():获取设备的输入电压。
getResistance():获取设备的电阻值。
getMaxCurrent():获取设备能承受的最大电流。
getId():获取设备的唯一标识符。
isOpen():判断设备是否处于开路状态。
exceedsCurrentLimit(double current):判断电流是否超过设备能承受的最大电流。
getPinVoltages():获取设备引脚的电压列表。
Switch 类
职责:代表电路中的开关设备。
属性:
isClosed:表示开关是否闭合。
方法:
updateState(String command):切换开关的开闭状态。
getState():返回开关的当前状态。
getResistance():根据开关状态返回电阻值。
getPinVoltages():返回开关引脚的电压列表。
ToggleSwitch 类
职责:代表电路中的互斥开关设备。
属性:
isToSecond:表示互斥开关当前是否接通第二个分支。
方法:
updateState(String command):切换互斥开关的接通分支。
getState():返回互斥开关的当前状态。
getResistance():根据互斥开关状态返回电阻值。
getPinVoltages():返回互斥开关引脚的电压列表。
SteppedRegulator 类
职责:代表电路中的分档调速器设备。
属性:
level:分档调速器的当前档位。
LEVELS:分档调速器的电压级别数组。
方法:
updateState(String command):根据控制命令调整档位。
getState():返回分档调速器的当前档位。
getPinVoltages():返回分档调速器引脚的电压列表。
ContinuousRegulator 类
职责:代表电路中的连续调速器设备。
属性:
level:连续调速器的当前档位参数。
方法:
updateState(String command):根据控制命令设置档位参数。
getState():返回连续调速器的当前档位参数。
getPinVoltages():返回连续调速器引脚的电压列表。
IncandescentLamp 类
职责:代表电路中的白炽灯设备。
方法:
getState():根据输入电压返回白炽灯的亮度。
getPinVoltages():返回白炽灯引脚的电压列表。
FluorescentLamp 类
职责:代表电路中的日光灯设备。
方法:
getState():根据输入电压返回日光灯的亮度。
getPinVoltages():返回日光灯引脚的电压列表。
CeilingFan 类
职责:代表电路中的吊扇设备。
方法:
getState():根据输入电压返回吊扇的转速。
getPinVoltages():返回吊扇引脚的电压列表。
FloorFan 类
职责:代表电路中的落地扇设备。
方法:
getState():根据输入电压返回落地扇的转速。
getPinVoltages():返回落地扇引脚的电压列表。
Curtain 类
职责:代表电路中的受控窗帘设备。
方法:
getState():根据输入电压返回窗帘的打开比例。
getPinVoltages():返回窗帘引脚的电压列表。
Diode 类
职责:代表电路中的二极管设备。
属性:
isForward:表示二极管是否正向导通。
方法:
updateState(String command):根据电压方向更新二极管的导通状态。
getState():返回二极管的当前状态。
getResistance():根据二极管状态返回电阻值。
getPinVoltages():返回二极管引脚的电压列表。
Circuit 类
职责:管理整个电路系统,包括所有设备和电路连接。
属性:
devices:存储所有设备的映射。
serialCircuits:存储所有串联电路的映射。
parallelCircuits:存储所有并联电路的映射。
方法:
addDevice(CircuitDevice device):添加设备到电路中。
addSerialCircuit(String info):添加串联电路。
addParallelCircuit(String info):添加并联电路。
executeCommand(String command):执行控制命令。
updateCircuit():更新电路状态。
getSerialCircuit(String id):获取指定ID的串联电路。
getDevice(String deviceId):获取指定ID的设备。
createDevice(char type, String id):根据类型创建设备。
getStates():获取所有设备的状态信息。
SerialCircuit 类
职责:代表电路中的串联部分。
属性:
id:串联电路的标识符。
devices:串联电路中的设备列表。
parentCircuit:父电路对象。
方法:
isCircuitClosed():判断串联电路是否闭合。
updateVoltage(double inputVoltage):更新串联电路中设备的电压。
getDevices():获取串联电路中的设备列表。
ParallelCircuit 类
职责:代表电路中的并联部分。
属性:
id:并联电路的标识符。
branches:并联电路中的分支列表。
parentCircuit:父电路对象。
方法:
isCircuitClosed():判断并联电路是否闭合。
updateVoltage(double inputVoltage):更新并联电路中设备的电压。
这些类的设计涵盖了家居强电电路模拟程序-4的主要功能,包括设备的状态管理、电路的连接和控制命令的执行。每个类都具有明确的职责,易于扩展和维护。
初始化电路系统:
创建 Circuit 类的实例,该实例将管理整个电路系统,包括所有设备和电路连接。
读取输入数据:
使用 Scanner 类实例从控制台读取输入数据。
持续读取输入,直到接收到特定的结束标志(如 "end")。
解析输入数据:
将输入数据存储在 List 集合中,便于后续处理。
遍历输入数据列表,根据输入行的类型(如以 "#T" 或 "#M" 开头)分别处理串联和并联电路连接信息。
处理电路连接:
对于每条串联电路信息(以 "#T" 开头),调用 Circuit 类的 addSerialCircuit 方法添加串联电路。
对于每条并联电路信息(以 "#M" 开头),调用 Circuit 类的 addParallelCircuit 方法添加并联电路。
对于其他以 "#" 开头的行,这些是控制命令,调用 Circuit 类的 executeCommand 方法执行这些命令。
更新电路状态:
调用 Circuit 类的 updateCircuit 方法,根据设备状态更新电路的电压分配,并进行短路和电流限制检查。
输出设备状态:
调用 Circuit 类的 getStates 方法获取所有设备的状态信息。
遍历状态信息列表,将每个设备的状态输出到控制台。
错误处理:
如果在任何步骤中检测到短路,设置 flag 变量为特定值(如1),并在程序结束前检查该变量,如果为短路状态,则输出短路错误信息。

3. 踩坑心得
在家居强电电路模拟程序-3和程序-4的过程中,遇到了一些挑战和问题
设备状态管理的复杂性:
在模拟电路中,设备状态的正确管理是至关重要的。我发现,任何状态更新的延迟或错误都可能导致电路模拟不准确。因此,我增加了更多的状态检查和验证逻辑,以确保状态的一致性和准确性。
电路连接逻辑的准确性:
确保电路连接逻辑的正确性是另一个挑战。我发现,在处理串联和并联电路时,错误的连接可能导致电路短路或设备损坏。因此,我重新设计了电路连接的逻辑,增加了更多的错误检查和反馈机制。
控制命令的解析和执行:
我发现,控制命令的解析和执行是程序中容易出现问题的部分。无效或错误的命令可能导致程序异常或设备状态不正确。因此,我引入了更严格的输入验证和错误处理机制,以确保命令的正确执行。
短路和电流限制的检测:
在模拟电路时,短路和电流超过限制是常见的问题。我最初未能有效地检测这些问题,导致模拟结果不准确。通过增加短路检测和电流限制检查,我提高了程序的安全性和可靠性。
二极管导通状态的管理:
在程序-4中增加二极管后,我发现管理二极管的导通状态是一个技术挑战。不正确的导通状态可能导致电路模拟错误。我通过增加电压方向检查和状态更新逻辑,确保了二极管的正确模拟。
性能优化和响应速度:
对于复杂的电路模拟,性能优化和响应速度是关键。我发现,初始版本的程序在处理大量设备和复杂电路时性能不佳。通过优化算法和数据结构,我提高了程序的运行效率。
用户输入的错误处理:
用户输入错误是导致程序异常的常见原因。我增加了更多的用户输入验证和错误提示,以帮助用户正确输入数据,减少程序异常。
4. 改进建议
增强输入验证机制:
引入更复杂的正则表达式验证逻辑,确保所有输入数据的格式和内容符合预期,减少因输入错误导致的程序异常。
实时反馈与错误提示:
在用户输入数据或执行命令时,提供实时反馈。对于任何不符合格式的输入或错误的命令,立即给出明确的错误提示,并允许用户重新输入。
优化异常处理逻辑:
为程序添加全局异常处理逻辑,确保任何未被捕获的异常都能被妥善处理,并给出用户友好的错误信息。
细化异常类型:
针对不同类型的输入错误和程序异常,抛出更具体的异常类型,并在捕获异常时提供详细的错误信息,便于问题定位和修复。
功能模块化与单一职责原则:
将输入解析、业务逻辑处理、结果输出等功能分离成独立的模块或类,降低耦合度,提高代码的可读性和可维护性。确保每个类或方法只处理一种类型的任务,简化调试和测试过程。
性能优化与算法选择:
根据实际使用场景选择最合适的数据结构和算法,特别是在处理大量设备和复杂电路时,优化算法以提高程序的运行效率和响应速度。
电路模拟精度提升:
使用更精确的数值计算方法来处理电路中的电压和电流计算,避免因浮点数精度问题导致的模拟误差。
电路安全检查增强:
在模拟电路连接时,增加短路和过载保护逻辑,确保电路模拟的安全性,并在检测到异常时提供明确的错误信息和处理建议。
5.总结
家居强电电路模拟程序-3和程序-4,这两个程序分别模拟了智能家居中的强电电路行为,并在原有基础上进行了扩展和优化,我学习了如何设计类和对象来模拟现实世界中的问题,如家居电路模拟中的开关、调速器、灯具等设备。掌握了如何使用正则表达式进行输入验证,确保数据的正确性和程序的健壮性。了解了在Java中处理异常的重要性,以及如何使用 try-catch 块来捕获和处理异常。加深了对封装、继承和多态等面向对象编程概念的理解,尤其是在答题判题程序和家居电路模拟程序中的应用。深入学习了更复杂的数据结构和算法,以解决更大规模的问题。家居电路模拟程序。通过本阶段的学习,我不仅提升了自己的编程技能,也对软件开发有了更深入的理解。未来的学习将更加注重实践和深入研究,以应对更加复杂和挑战性的项目。
6.学期总结
经过这一学期的Java课程学习,我获得了宝贵的知识和技能,这些收获不仅让我在编程领域有了更深的理解,也为我未来的职业发展奠定了坚实的基础。
我深入学习了Java语言的基础知识,包括数据类型、控制结构、循环、数组等,这些是编程世界的基石。
我掌握了面向对象的核心概念,如类、对象、继承、多态和封装,这些概念让我能够设计出更加模块化和可重用的代码。
在这一学期的学习过程中,虽然过程中有挫折,但每一次克服困难都让我变得更加强大。
感谢老师的耐心指导和无私分享,您的知识和经验是我学习路上的灯塔。
与同学们的讨论和合作让我受益匪浅,我们相互学习,共同进步。
我也反思了学习过程中的不足,比如在时间管理和深入理解某些概念上的不足,这将是我未来改进的方向。
总结这一学期,我收获了知识,技能。明白了Java课程不仅仅是一门编程语言的学习。我将带着这一学期的收获,继续前行,在编程的道路上不断探索和进步。

posted on   余明凯  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示