首页 > 其他分享 >PTA4-6题目集总结

PTA4-6题目集总结

时间:2024-06-09 22:10:38浏览次数:14  
标签:总结 题目 String 引脚 调速器 state PTA4 device 设备

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

二.设计与分析

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

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程序编写以及知识点掌握上还有很多不足,需要自己在课上和课后去学习和解决,这门课程的学习是多写多练的结果,需要自己多在上面花时间。

标签:总结,题目,String,引脚,调速器,state,PTA4,device,设备
From: https://www.cnblogs.com/yyyk1/p/18240122

相关文章

  • 高考假集训总结(6.9)
    6.9今天依然是单调队列优化dp和斜率优化dp(只不过斜率优化的题还没开始做,具体原因下面讲)突然发现自己学得越多,忘得越多,都想不起来单调队列怎么用了,于是又花一上午跑回去看了单调队列的题并调了一上午的t1暴力做法,现在终于可以将两者融会贯通也就是成功实现了单调队列优化dp不......
  • 第二次pta总结
    设计实现答题程序,模拟一个小型的测试,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目信息中的标准答案判断答题的结果。本题在答题判题程序-3基础上新增的内容统一附加在输出格式说明之后,用粗体标明。输入格式: 程序输入信息分五种,信息可能会打乱顺......
  • oop 4~6总结
    oop4~6总结前言知识点继承:第四次作业中新增的ChoiceQuestion和GapFillingQuestion继承Question类;第五次作业中Switch,SteppedSpeedController,ContinuousSpeedController,IncandescentLamp,FluorescentLamp,和CeilingFan都继承Device类,从而共享其属性和方法。集合......
  • 6.7总结
    第三版,差不多是最后一个版本了<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="render......
  • JS(JavaScript)学习总结
    概念:JavaScript(简称“JS”)是一种具有函数优先的轻量级,解释型或即时编译型的编程语   言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范......
  • 题目集4-6的总结性blog
    前言:在这三周java的练习中,又运用了很多知识点,正则表达式,类与对象之间的关系,类与类之间的关系,继承,多态等等,巩固了上次学习的知识并掌握了新的技巧,这轮学习让我意识到,java题目需要先构思再实践,很多复杂的类之间联系,不构思好就去写代码,就会浪费很多时间。第四次大作业:这个题目是对......
  • PTA题目集4~6的总结
    PTA题目集4~6的总结一、前言第四次题目集为答题判题程序4,输入信息有题目信息、试卷信息、答题信息、学生信息、删除题目信息等。本次作业新增内容有选择题题目信息,填空题题目信息、输出顺序的变化:只要是正确格式的信息,可以以任意的先后顺序输入各类不同的信息,比如试卷可以出现......
  • OOP第二阶段题集总结
    一.前言知识点:考察继承和多态为多,其中还涉及迭代器的使用,在每个题集中都有一个综合性题目设计多方面知识点考试,有List类和HashMap的使用以及正则表达式的运用,并且注重考查设计,理解类与类之间的关系进行合理设计,其中也要遵循我们所学的单一职责,开闭原则,迪米特法则等。题量:第四次......
  • 【三级指针、二级指针、一级指针、指针值】原理+超直白说明/总结(当然,还是会有点涩~)
    看不懂的原理及区别在计算机编程中,指针是一个变量,其值为另一个变量的地址。指针的级别是根据它们所指向的对象类型来定义的。当我们谈论“一级指针”、“二级指针”和“三级指针”时,我们实际上是在讨论指针所指向的对象的类型。1.一级指针一级指针(或称为普通指针)是最常......
  • 第二次opp的总结和分析
    23201927-杨民星第二次blog1.前言:  继上次第一次blog之后,又开展了3次的Java的opp的训练集。在这三次的opp的题目中,第一次是对于之前三次题目的最后一次的迭代(上次3个题集的blog23201927-杨民星-第一次博客)这个题目也是答题系统的最后一个题目;而对于后面两个题目,就是基于电路......