PTA7-8总结

前言

知识点

PTA7:

这是一个模拟电路系统的Java程序,其中定义了多种电路组件(如开关、调速器、灯泡、风扇等),并模拟了它们的交互和行为。下面是对代码的详细分析:

类和继承
Circuit 类:
这是一个抽象基类,定义了所有电路组件共有的方法,如设置输入电压、显示状态等。

Switch 类:
继承自 Circuit,代表一个开关。
包含状态(开/关)、名称和输入/输出电压。
change() 方法用于切换开关状态。

Binning_governor 类:
继承自 Circuit,代表一个分档调速器。
包含档位、名称和输入/输出电压。
setGears1() 和 setGears2() 方法用于调整档位。

Continuous_governor 类:
继承自 Circuit,代表一个连续调速器。
包含调速档位、名称和输入/输出电压。
setGears() 方法用于设置调速档位。

Incandescent_lamp 类:
继承自 Circuit,代表一个白炽灯。
包含亮度、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算亮度。

Fluorescent_lamp 类:
继承自 Circuit,代表一个日光灯。
包含亮度、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算亮度。

ceiling_fan 类:
继承自 Circuit,代表一个吊扇。
包含转速、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算转速。

daget 类:
作为总用电器类,所有的线路内的都继承它
包括
inInput_voltage() 传递电流

主程序逻辑
输入处理:

程序通过 Scanner 读取用户输入,根据输入的不同前缀(如 [K、[F、[L 等)创建不同的电路组件,并将其存储在 TreeMap 中。
处理命令如 #K、#F、#L 等,用于改变开关状态、调整调速器档位或设置连续调速器的档位。
电路模拟:

根据输入电压和电路组件的状态,计算并更新每个组件的输出电压。
如果电路中存在关闭的开关,则整个电路断电。
如果电路连接正确(即所有组件都正确连接且没有断路),则电路通电。
输出:

根据电路状态,输出每个组件的状态信息。

PTA8:

类图如下:

这是一个模拟电路系统的Java程序,其中定义了多种电路组件(如开关、调速器、灯泡、风扇等),并模拟了它们的交互和行为。下面是对代码的详细分析:

类和继承
Circuit 类:
这是一个抽象基类,定义了所有电路组件共有的方法,如获取电阻、设置电压、显示状态等。

Switch 类:
继承自 Circuit,代表一个开关。
包含状态(开/关)、名称和输入/输出电压。
change() 方法用于切换开关状态。

Binning_governor 类:
继承自 Circuit,代表一个分档调速器。
包含档位、名称和输入/输出电压。
setGears1() 和 setGears2() 方法用于调整档位。

Continuous_governor 类:
继承自 Circuit,代表一个连续调速器。
包含调速档位、名称和输入/输出电压。
setGears() 方法用于设置调速档位。

Incandescent_lamp 类:
继承自 Circuit,代表一个白炽灯。
包含亮度、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算亮度。

Fluorescent_lamp 类:
继承自 Circuit,代表一个日光灯。
包含亮度、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算亮度。

Ceiling_fan 类 和 Floor_fan 类:
继承自 Circuit,代表吊扇和落地扇。
包含转速、名称和输入电压。
setInput_voltage() 方法用于设置输入电压并计算转速。
电路组件

Series_circuits 类:
代表一个串联电路。
包含一个 LinkedHashMap,用于存储串联的电路组件。
getstate() 方法用于判断电路的状态(短路、通路或断路)。

Parallel_circuits 类:
代表一个并联电路。
包含一个 LinkedHashMap,用于存储并联的串联电路。
getresistance() 方法用于计算并联电路的总电阻。

主程序逻辑
输入处理:

程序通过 Scanner 读取用户输入,根据输入的不同前缀(如 #T、#K、#F 等)创建不同的电路组件,并将其存储在 Parallel_circuits 中。
处理命令如 #K,用于改变开关状态。
电路模拟:

根据电路组件的状态和输入电压,计算并更新每个组件的输出电压。
使用 Series_circuits 和 Parallel_circuits 来模拟串联和并联电路的行为。
输出:

根据电路状态,输出每个组件的状态信息。

踩坑心得:

1.treemap<>的自然排序只会对key值是单一数据类型生效

2.java不支持多继承,只承认有一个父类,如果要实现相应功能,可以实现接口

改进建议:

PTA7:

代码结构:
将每个设备类放在单独的文件中,这样可以提高代码的可维护性和可读性。
为每个设备类创建一个单独的包,例如com.example.circuit.switch,这样可以更好地组织代码。

注释和文档:
为每个类和方法添加详细的注释,说明其功能和用法。
使用Javadoc为公共类和方法生成文档。

异常处理:
在尝试获取电路对象时,如果对象不存在,应该抛出异常或者返回一个错误代码,而不是直接使用null检查。

输入验证:
在处理输入时,应该更严格地验证输入数据的格式和范围,以防止无效输入。

代码重复:
代码中有一些重复的代码,例如设置输入电压和显示电路状态的方法。可以考虑将这些重复的代码提取到单独的方法中。

数据结构选择:
使用TreeMap来保持电路名称的有序排列是一个好的选择。但是,应该考虑是否真的需要保持这种顺序,或者是否可以使用其他数据结构来提高性能。

错误处理:
当电路状态发生变化时,应该有一个清晰的错误处理机制来处理无效的状态变化,例如尝试将调速器的档位设置为负数。

性能优化:
在处理电路状态时,代码中有多个循环和条件判断。可以考虑使用更高效的数据结构和算法来优化性能。

功能测试:
编写一些测试用例来测试不同的电路配置和输入,以确保代码的健壮性和正确性。

PTA8:

代码结构:
将每个设备类放在单独的文件中,这样可以提高代码的可维护性和可读性。
为每个设备类创建一个单独的包,例如com.example.circuit.switch,这样可以更好地组织代码。

注释和文档:
为每个类和方法添加详细的注释,说明其功能和用法。
使用Javadoc为公共类和方法生成文档。

异常处理:
在尝试获取电路对象时,如果对象不存在,应该抛出异常或者返回一个错误代码,而不是直接使用null检查。

输入验证:
在处理输入时,应该更严格地验证输入数据的格式和范围,以防止无效输入。

代码重复:
代码中有一些重复的代码,例如设置输入电压和显示电路状态的方法。可以考虑将这些重复的代码提取到单独的方法中。

数据结构选择:
使用TreeMap来保持电路名称的有序排列是一个好的选择。但是,您应该考虑是否真的需要保持这种顺序,或者是否可以使用其他数据结构来提高性能。

错误处理:
当电路状态发生变化时,应该有一个清晰的错误处理机制来处理无效的状态变化,例如尝试将调速器的档位设置为负数。

性能优化:
在处理电路状态时,您的代码中有多个循环和条件判断。可以考虑使用更高效的数据结构和算法来优化性能。

功能测试:
编写一些测试用例来测试不同的电路配置和输入,以确保代码的健壮性和正确性。

接口和抽象类:
考虑使用接口和抽象类来定义电路的通用行为,这样可以提高代码的灵活性和可扩展性。

单元测试:
为每个类编写单元测试,以确保其功能正确无误。

总结:

通过这几次的作业,我学到了如下几点:
1.了解了如何使用Java编程语言实现一个简单的电路模拟系统。
2.学习了面向对象编程的基本概念,包括类、对象、继承和多态等。
3.学习了如何使用Java标准库中的集合类和泛型来实现复杂的数据结构和算法。
4.学习了如何使用注释和文档来记录代码的功能和用法,以及如何使用Javadoc生成文档。
5.学习了如何使用单元测试来确保代码的正确性和健壮性。
6.学习了如何使用代码规范和设计模式来提高代码的可维护性和可读性。
7.学习了如何使用面向对象的设计原则,如单一职责原则、开闭原则和依赖反转原则等。
8.学习了如何使用类和接口来定义电路的通用行为,以提高代码的灵活性和可扩展性。

对课堂和老师的建议:

1.希望能更深入探究面向对象的内涵,以及更多的实际操作。

posted @ 2024-06-30 18:25  肖栋平  阅读(6)  评论(0编辑  收藏  举报
1