首页 > 其他分享 >BLOG-3

BLOG-3

时间:2024-12-28 16:54:08浏览次数:5  
标签:短路 voltages BLOG 电路 电压 电流 设备

Java题目集7~8

1.前言
本次博客围绕题目集7-8展开讨论,从基础的电路设备行为模拟出发,逐步扩展到复杂的电路连接、异常检测与状态输出,具体包括以下知识点

知识点总结

控制设备
1.开关:
两个引脚,状态为0或1,控制电路的通断。
可作为基本的电路单元,提供电压传导或切断功能。
2.互斥开关:
三个引脚,支持分支切换,状态在两个引脚间切换。
默认状态接通其中一个分支,断开另一个分支,引入了限流电阻以避免短路。
3.调速器:
分档调速器:以固定比例输出电压,支持0.3、0.6、0.9三档。
连续调速器:支持0.00-1.00范围内任意比例输出,模拟精确的电压控制。

受控设备
1.灯具:
白炽灯:亮度随电压差线性变化。
日光灯:亮度固定180lux,电压差非零即亮。
2.风扇:
吊扇和落地扇:根据不同电压范围调整转速,支持非线性和分段式控制。
3.窗帘:
根据光照强度调整开合比例,最低工作电压为50V。
4.新增设备:二极管:
支持正向导通和反向截止,增加了电路中单向导通的特性。

电路结构
1.从单一串联电路到复杂的串并联混合电路。
2.题目集8新增并联电路的嵌套功能,使电路结构更为复杂。

异常处理
1.电流限制:设备超出最大电流时输出提示。
短路检测:当出现无穷大电流时终止仿真,并输出错误信息。

题目集7:多个并联电路串联 - 串联电路包含其他串联电路 - 受控窗帘设备,主要是实现电路拓扑结构的基本功能,功能相对分散,逻辑复杂度中等,重点是掌握面向对象设计和电路算法。
题目集8:管脚电压显示 - 电流限制检测 - 短路检测 - 并联电路嵌套 - 二极管元件,进一步增强电路模型,加入电路保护和状态监控,设备种类更多,逻辑复杂度和代码量均大幅增加,测试用例更加多样化。

题目集7主要新增特性:

电路结构升级
支持多个并联电路串联
允许串联电路包含其他串联电路
复杂的电路拓扑结构处理

设备类型扩展
新增受控窗帘设备
窗帘控制逻辑与光照强度关联
多设备状态联动处理

计算逻辑完善
考虑电阻对电压的影响
引入并联支路电流计算
设备功率与效率计算

题目集8更进一步提升了难度:
监控与显示
管脚电压实时监测
设备状态全面展示
异常状态报警提示

保护机制
电流限制检测
短路保护
设备过载保护

新增功能
并联电路嵌套支持
二极管元件及其特性
复杂的电路状态处理

2.设计与分析
以题目集8为例进行详细分析

2.1 抽象设备基类
abstract static class Device {
String id;
double[] voltages;
double maxCurrent;
double current;

abstract String getStatus();
abstract void simulate();

}
使用抽象类定义通用属性和行为
电压使用数组存储,支持多引脚设备
统一的电流限制检查机制

2.2 设备状态模拟
以开关设备为例:
static class Switch extends Device {
boolean state;

@Override
void simulate() {
    if (!state) {
        voltages[1] = 0;
        current = 0;
    } else {
        voltages[1] = voltages[0];
        current = Math.abs(voltages[0] - voltages[1]) / 1;
    }
}

}
实现特点:
状态转换逻辑清晰
电压和电流计算符合物理规律
错误状态处理完善

2.3电路管理实现
Circuit类负责整个电路的管理:
static class Circuit {
Map<String, Device> devices = new HashMap<>();
List<String[]> connections = new ArrayList<>();

void simulate() {
    if (checkForShortCircuit()) {
        shortCircuit = true;
        return;
    }
    // 电压分配
    distributeVoltages();
    // 设备模拟
    simulateDevices();
}

}
核心功能:设备管理,连接关系维护,短路检测,电压分配状态模拟。

2.4基类设计
Device作为抽象基类:
封装了设备的基本属性(id, voltages, current等)
定义了两个核心抽象方法:getStatus()和simulate()
提供了电流限制检查机制

2.5 继承体系
三个具体设备类通过继承实现差异化:

Switch:实现开关状态切换
WhiteLightBulb:实现亮度计算
Diode:实现导通/截止状态判断

2.6改进空间:缺少输入验证,电路计算可以更精确,并发处理能力有限,注释可以更详细。

3.采坑心得

  1. 短路检测问题
    问题描述:初始版本在处理复杂电路时出现误判

原始代码:

boolean checkForShortCircuit() {
for (String[] connection : connections) {
if (connection.contains("VCC") && connection.contains("GND")) {
return true;
}
}
return false;
}
测试用例:
Input:
K1
L1
T[K1-1 VCC]
T[K1-2 L1-1]
T[L1-2 GND]
错误输出:short circuit error
预期输出:正常电路状态

修复后代码:

boolean checkForShortCircuit() {
// 构建连接图
Map<String, Set> graph = buildConnectionGraph();
// 深度优先搜索检测VCC到GND的直接路径
return hasDirectPath(graph, "VCC", "GND", new HashSet<>());
}

  1. 电流计算精度问题
    问题描述:浮点数计算导致电流值误差
    原始代码:
    current = Math.abs(voltages[0] - voltages[1]) / resistance;

测试结果
输入电压:220V
计算电流:9.000000001A
电流限制:9A
错误触发电流保护

修复方案:
current = Math.round(Math.abs(voltages[0] - voltages[1]) / resistance * 1000) / 1000.0;

4.改进建议

(1) 改进短路检测机制
当前的短路检测过于简单,容易出现误判
增加节点访问记录,避免环路导致的死循环
添加电流阈值判断,提高检测准确性
(2) 优化电压分配算法
使用并查集合并相同电压节点,提高计算效率
采用BigDecimal处理浮点数计算,避免精度损失
增加电压分配的迭代次数限制,防止震荡
添加关键节点电压验证,确保计算结果合理
(3) 错误处理机制
细化异常类型,区分短路、过载等故障
增加详细的错误信息描述
添加关键操作的日志记录
实现基本的故障诊断功能
(4) 参数验证
增加设备参数范围检查
验证电路连接的合法性
检查电压/电流值的有效性
添加配置参数校验

5.总结

这次我做了两个关于智能家居电路模拟的作业(7和8),通过这两个作业,我不仅学会了面向对象编程的基本思路,也发现了自己在处理复杂系统时的一些不足。

在第一个作业(7)中,我尝试用面向对象的方法来模拟家里的电路系统。我把电路中的各种设备(比如开关、电灯)都设计成了独立的类,实现了最基础的串联电路模拟。但这个版本还比较简单,只能处理基本的开关控制,而且设备种类太少,不能反映真实家庭电路的复杂情况。做完这个作业后,我意识到要真正模拟家里的电路,还需要学习更多的电路知识和编程技巧。

在第二个作业(8)中,我给系统加入了更多功能,比如可以处理并联电路,还增加了风扇这样的复杂设备。我用递归的方法解决了电路嵌套的问题,但在处理并联电路时遇到了不少困难,比如不知道该如何准确计算电流分配,也没能很好地处理设备启动时的电流冲击等问题。这些问题让我明白,要做好这样的系统,不仅要懂编程,还要对电路原理有更深入的了解。

通过这两个作业,我学会了如何把复杂的问题拆分成小问题来解决,也理解了面向对象编程在实际项目中的应用。不过我也发现自己还有很多需要提升的地方,比如需要学习更多的设计模式,提高算法水平,特别是要多了解电路知识。未来我打算多学习这些内容,争取能写出更实用、更完善的程序。

标签:短路,voltages,BLOG,电路,电压,电流,设备
From: https://www.cnblogs.com/pppt/p/18637654

相关文章

  • BLOG-3
    前言在完成题目集7和8的过程中,我们进一步提升了对于物理系统模拟的理解,并掌握了更加复杂的面向对象编程技巧。这两次作业不仅在逻辑深度上更加复杂,还引入了更加丰富的设备类型与电路规则,对代码结构和算法提出了更高的要求。家居强电电路模拟程序-3:主要模拟串联与并联电......
  • BLOG-3
    BLOG-3一、前言  在第7次和第8次的大作业,我们完成了家居强电电路模拟程序3和4。经过前面大作业的多次训练,我积累了了宝贵的实践经验,这不仅巩固了我对Java编程语言核心概念的理解,还进一步加深了我对面相对象设计原则的掌握。在完成这两个大作业的过程中,要求我们特别注重类的设......
  • 第三次Blog 题目集7~8
    一,前言在题目集7和8中,我们逐步完善了智能家居强电电路模拟程序的功能和复杂性。题目集7以基本电路元件的特性和连接为核心,涵盖了开关、调速器、灯、风扇等设备的模拟,实现了多种控制设备和受控设备的电路设计与状态输出;而题目集8在此基础上新增了管脚电压显示、电流限制检测、短路......
  • 第三次BLOG
    一、前言  在家居强电电路模拟程序-1和家居强电电路模拟程序-2的基础之上,最后两次的大作业难度飞升。  家居强电电路模拟程序-3,引入了互斥开关和受控窗帘,这两者都不同于之前的控制设备和受控设备,对于互斥开关,要考虑他的引脚问题和正接反接,而受控窗帘不是仅仅根据电压差来......
  • BLOG-3
    一.前言1.知识点:(1)因为需要使用子类所以应该还是要使用抽象类和接口来让子类通过父类提供的接口来实现它们需要的功能,就像第七次大作业中的设备父类的抽象showStatus函数还有control函数等等,因为不同的设备展现状态的方法不同而且不同的设备对电路的控制效果也不同,所以应该使用......
  • blog-3
    前言在过去的几周内,我们完成了家居强电电路模拟程序-3以及 家居强电电路模拟程序-4的练习,涉及多个知识点和编程技巧。整体来说,这两次题目集共包含了2道题目,题目难度逐步增加。(折叠代码是不在行列计算内的,只是我觉得结合代码能讲的更清楚我的思路,由于上次可能因为这个原因有些同......
  • pta7~8总结blog
    一、前言本次blog是针对发布题目集7和8的总结。1、题目集7,只有一题,电路模拟程序3。输入串联总电路、并联电路、并联电路分支电路信息后,程序要从连接信息中,提取设备信息如设备类型、输入引脚、输出引脚,最后输出控制设备的状态、受控设备的亮度、转速以及窗帘打开比例。与电路模......
  • blog3-题目集7~8
    一、前言:本次的Blog,是电路3和电路4,首先我想说的是在电路2的时候,我并没有拿到满分,直到做到电路3的时候我才发现了电路2缺少的部分,就是嵌套的串联电路,之前是没有考虑在一个T里面还有T的,电路3的一个测试样例这才点醒了我,随后也是修改了电路2的代码,拿到了满分。二、设计与分析:大......
  • Oracle WebLogic Server反序列化漏洞(CVE-2024-21216)
    免责声明请勿使用本文中提到的技术进行非法测试或行为。使用本文中提供的信息或工具所造成的任何后果和损失由使用者自行承担,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。一、简介WebLogic是一款由BEA系统公司开发的JavaEE应用服务器,现由Oracle......
  • 基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)
    基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)开发语言:Java数据库:MySQL技术:SpringBoot工具:IDEA/Ecilpse、Navicat、Maven系统展示在线BLOG网结构功能图管理员登录功能界面用户信息界面博客分类管理界面博客信息界面图库相册管......