PTA4-6题目集总结

news/2024/10/8 6:28:39

一.前言
这几次题目集重点考察的知识点是继承与多态以及抽象类与接口以及对前面所学的知识的一些应用等。
与之前三个题目集相类似,这三次题目集也是将分值大部分给与了第一题,甚至是全部的分值都在第一题中,伴随的两道小题都是考察的基本功,难度普遍简单,而第一题与之前类似,都是迭代类题型,从一开始就要打好基础,层层递进,一旦某一环节出了差错,就会导致后面的题目编写困难甚至无从下手,考察的知识点增多也意味着难度比以往更大,需要耗费更多的时间去布局与思考,才能把题目写好。

二.设计与分析

请根据如下要去设计一个智能家居强电电路模拟系统。

1、控制设备模拟

本题模拟的控制设备包括:开关、分档调速器、连续调速器。

开关:包括0和1两种状态。

分档调速器

按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。
连续调速器

所有控制设备的初始状态/档位为0。

控制设备的输入引脚编号为1,输出引脚编号为2。

2、受控设备模拟

本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。

灯有两种工作状态:亮、灭。在亮的状态下,有的灯会因引脚电位差的不同亮度会有区别。
风扇在接电后有两种工作状态:停止、转动。风扇的转速会因引脚的电位差的不同而有区别。
白炽灯:
亮度在0~200lux(流明)之间。
日光灯:
亮度为180lux。
输入信息:
1、设备信息

分别用设备标识符K、F、L、B、R、D分别表示开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇。
2、连接信息

一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。
3、控制设备调节信息

开关调节信息格式:

分档调速器的调节信息格式:

连续调速器的调节信息格式:

4、电源接地标识:VCC,电压220V,GND,电压0V。没有接线的引脚默认接地,电压为0V。

输入信息以end为结束标志,忽略end之后的输入信息。

输出信息:

按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。

输出格式:@设备标识+设备编号+":" +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)

本题只考虑串联的形式,所以所有测试用例的所有连接信息都只包含两个引脚

设计思路:
通过设置各个类来实现智能家居系统的操控

1.受控设备类、控制设备类
String[] parts ;
String deviceId ;
public void parseInput(String input) { String[] lines = input.split("\\n"); for (String line : lines) { // 控制设备调节信息 if (line.startsWith("#")) handleControlDevice(line); else if (line.startsWith("[")) { // 连接信息 handleConnection(line); } else if (!line.isEmpty()) { // 设备信息 handleDevice(line); } } } private void handleControlDevice(String line) { String[] parts = line.substring(1).split(" "); String deviceId = parts[1]; Device device = devices.get(deviceId); if (device!= null) { if (parts[0].equals("K")) { ((SwitchDevice) device).getState(); } else if (parts[0].equals("F")) { ((MultiSpeedRegulatorDevice) device).incrementState(); } else if (parts[0].equals("L")) { ((ContinuousSpeedRegulatorDevice) device).setState(Double.parseDouble(parts[2])); } } }
2.电路设备类
static abstract class MultiSpeedRegulatorDevice extends Device { private int state; public MultiSpeedRegulatorDevice(String id) { super(id); state = 0; } @Override public void setState(int state) { this.state = state; } public double getState() { return state; } public void incrementState() { setState(state + 1); } }
static abstract class ContinuousSpeedRegulatorDevice extends Device { private double state; public ContinuousSpeedRegulatorDevice(String id) { super(id); state = 0.0; } @Override public void setState(double state) { this.state = state; } public double getState() { return state; } }
static abstract class IncandescentLampDevice extends Device { private double brightness; public IncandescentLampDevice(String id) { super(id); brightness = 0.0; } @Override public void setState(int state) { if (state <= 9) { brightness = 0; } else { brightness = (state - 10) / 11 * 200; } } public double getBrightness() { return brightness; } }
3.输出类
for (Device device : devices.values()) { if (device instanceof SwitchDevice) { SwitchDevice switchDevice = (SwitchDevice) device; System.out.println("@" + device.getId() + ":" + (switchDevice.isOn()? "closed" : "turned on")); } else if (device instanceof MultiSpeedRegulatorDevice) { MultiSpeedRegulatorDevice multiSpeedRegulatorDevice = (MultiSpeedRegulatorDevice) device; System.out.println("@" + device.getId() + ":" + multiSpeedRegulatorDevice.getState()); } else if (device instanceof ContinuousSpeedRegulatorDevice) { ContinuousSpeedRegulatorDevice continuousSpeedRegulatorDevice = (ContinuousSpeedRegulatorDevice) device; System.out.println("@" + device.getId() + ":" + String.format("%.2f", continuousSpeedRegulatorDevice.getState())); } else if (device instanceof IncandescentLampDevice) { IncandescentLampDevice incandescentLampDevice = (IncandescentLampDevice) device; System.out.println("@" + device.getId() + ":" + incandescentLampDevice.getBrightness()); } else if (device instanceof FluorescentLampDevice) { FluorescentLampDevice fluorescentLampDevice = (FluorescentLampDevice) device; System.out.println("@" + device.getId() + ":" + (fluorescentLampDevice.isOn()? "180" : "0")); } else if (device instanceof CeilingFanDevice) { CeilingFanDevice ceilingFanDevice = (CeilingFanDevice) device; System.out.println("@" + device.getId() + ":" + ceilingFanDevice.getSpeed()); } }
4.电路运行类
public void simulate() { for (String[] connection : connections.values()) { String inputPin = connection[0]; String outputPin = connection[1]; Device inputDevice = devices.get(inputPin); Device outputDevice = devices.get(outputPin); if (inputDevice!= null && outputDevice!= null) { int inputState = (int) inputDevice.getState(); outputDevice.setState(inputState); } } }
请根据如下要去设计一个智能家居强电电路模拟系统。
以下题目介绍中加粗的部分为本次迭代在“家居强电电路模拟程序-1”的基础上增加的功能要求。
本次迭代模拟一种落地扇。
工作电压区间为 [80V,150V],对应转速区间为 80-360 转/分钟。电压在[80,100)V 区间对应转速为 80 转/分 钟,[100-120)V 区间对应转速为 160 转/分钟,[120-140)V 区间对应转速为 260 转/分钟,超过 140V 转速 为 360 转/分钟(本次迭代暂不考虑电压超标的异常情况)
本题不考虑输入电压或电压差超过220V的情况。
输入信息以end为结束标志,忽略end之后的输入信息。
本题中的并联信息所包含的串联电路的信息都在并联信息之前输入,不考虑乱序输入的情况。
电路中的短路如果不会在电路中产生无穷大的电流烧坏电路,都是合理情况,在本题测试点的考虑范围之内。
落地扇:
private void simulateFloorFan(FloorFan floorFan) { double voltageDifference = floorFan.getVoltageDifference(); double speed = calculateFloorFanSpeed(voltageDifference); floorFan.setSpeed(speed); } private double calculateFloorFanSpeed(double voltageDifference) { if (voltageDifference < 80) { return 0; } double speed = voltageifference * FLOOR_FAN_VOLTAGE_RATIO; if (speed > 360) { return 360; } return speed
并联电路
private void simulateParallelGroupCircuit(ParallelGroupCircuit circuit) { List<SeriesCircuit> seriesCircuits = circuit.getSeriesCircuits(); for (SeriesCircuit seriesCircuit : seriesCircuits) { simulateSeriesCircuit(seriesCircuit); } }

.
踩坑心得

在设计时没有考虑到类之间的关系,导致调用时出现报错的情况,程序无法运行

在使用ArrayList数组时没用考虑引用,导致出错

.
改进建议:
在编写程序时应考虑各个电路设备以及控制设备之间的关系,以及串联电路与并联电路的区分。不应该直接粗暴地定义各个类再将其组合。
.
总结:
通过这三次pta题目集的练习,学会了抽象类,接口的使用方法,继承与多态及上转型和下转型的基本概念及使用方法和List相关类的使用方法。也知道了自己在Java程序编写以及知识点掌握上还有很多不足,需要自己在课上和课后去学习和解决,这门课程的学习是多写多练的结果,需要自己多在上面花时间。

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

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

相关文章

Vue3笔记

本节代码可以从git clone https://gitee.com/fullstacker1024/vue3-component-demo.git下载 其中项目实例todo1、前言 1)Vue3的优势 (1)更容易维护 ①组合式API ②更好的TypeScript支持 (2)更小的体积 ①良好的TreeShaking ②按需引入 (3)更快的速度 ①重写diff算法 ②模板…

视野修炼-技术周刊第87期 | Nodejs 15 周年

① js 中的经典八股 ② merge-anything - 深度合并对象的库 ③ DOM 树深度对渲染性能的影响 ④ Node.js 15周年 ⑤ 页面元素测量工具 ⑥ Best Cookier - cookie管理插件 ⑦ ShotEasy - 在线的图片压缩 ⑧ 2024 应该了解的 Node.js 特性 ⑨ CSS 长度单位介绍 - 非常全面的指南 ⑩…

Diffusion模型

参数说明 beta_schedule = np.linspace(0.0001, 0.02, 1000) # 示例 beta schedulealpha_hat = np.cumprod(1 - beta_schedule) # 计算 alpha_hat具体例子 让我们通过一个具体的例子展示如何计算 Beta Schedule 和 Alpha_hat: import numpy as np# 定义 Beta Schedule beta_…

NSCC集群使用笔记

1. 账号申请 如果是 NUS,NTU 或者 ASTAR 的学生,可以直接用自己的学校 ID 登录。登录不上的话可以发邮件联系 nscc 工作人员即可,基本上第二天就会回复解决。 2. VSCode 连接 账号申请下来后进官网设置你的 ssh key 之类的东西就可以登录了。第一次登录成功后,可以参考这篇…

OOP4-6作业总结性Blog

这三次大作业经历了一次题型的更新,不管过程是怎么说的,结果是试卷批改程序退出出题的视野了,取而代之的是电路设计题。对于电路设计题我认为出的更加合理些,不像试卷批改题难点都在写正则表达式上,多了对类间关系的考察。 这三次题目集期间,我们在课上主要学习了一系列设…

.NET借助虚拟网卡实现一个简单异地组网工具

由于工作需要,经常需要远程客户的服务器,但是并不是所有服务器都能开外网端口,使用向日葵等软件终究还是不太方便,于是找了很多工具,包括zerotier 等,但是由于服务器在国外等有时候还不同, 于是开始自己想办法研究一个属于自己的组网工具,最后找到snltty大佬的 https:/…

BUUCTF-Misc(131-140)

[ACTF新生赛2020]剑龙 打开pwd.txt发现是颜文字然后打开随波逐流,AAencode颜文字解密得到welcom3! 看一下这个图片的详细信息,发现然后用颜文字结出来的那个密码,去steghide解密U2FsdGVkX1/7KeHVl5984OsGUVSanPfPednHpK9lKvp0kdrxO4Tj/Q==又是U2f然后这次我还以为是AES加密,…

2024-06-09 闲话

2024-06-09 闲话看老友记看到这里。 诶这个名字好熟悉,诶这个小人物也好熟悉。 诶 Bidirectional Encoder Representations from transformers 也是 BERT 诶我草,这是芝麻街。