首页 > 其他分享 >对7~8次pta的总结

对7~8次pta的总结

时间:2024-06-30 20:31:15浏览次数:12  
标签:总结 引脚 int System pta else public getNode

(1).前言:
第七次pta难度很大,主要体现在互斥开关的设计上:
互斥开关:

互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。

开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、3引脚为输出引脚;1为输出引脚时,2、3引脚为输入引脚。

互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。

互斥开关的默认状态为1、2引脚接通,1、3引脚断开。

图1中所示的互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。

在之前的设计上,我只将电器设置为是两个引脚,所以在书写互斥开关类时无法继承之前的电器类,因为电器类中只有两个引脚,所以无法继承,于是我另外书写了一个具有三个引脚的互斥开关类。但也没有很好的实现其功能。
主要考察的是对上一次题目的进一步迭代以及继承,其中互斥开关的设计很难。
第八次的pta难度也很大,主要体现在二极管的设计上:
二极管

增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。

图2 二极管符号

二极管的标识符为’P’,左侧管脚编号为1,右侧管脚编号为2。

二极管如果两端电压相等,没有电流流过,分以下两种情况输出:

1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。
2、如果两端电压不为0,二极管导通。
(2).设计与分析:
第七次:


第七次相对于第六次各类之间的关系的耦合性经过我的修改没有那么高了,且做到了类之间具有单一指责。
第八次:


(3).踩坑心得:
第七次踩的坑:
在省略小数上:当计算电压值等数值的过程中,最终结果出现小数时,用截尾规则去掉小数部分,只保留整数部分。为避免精度的误差,所有有可能出现小数的数值用double类型保存并计算,不要作下转型数据类型转换,例如电压、转速、亮度等,只有在最后输出时再把计算结果按截尾规则,舍弃尾数,保留整数输出。在这一点上,我做了类型转换导致了精度不准确,输出了错误的值。
(4).改进建议:
各类之间关系并不是特别明确,类间的关系也很冗杂,耦合性还是比较高的。
在类的设计上也还是很不好的:
在设计时也没有遵循类的单一职责
如:class Fswitch extends Equipment{
private int lever=0;
private double output=0;
public Fswitch(int node) {
super(node);
}
public int getLever() {
return lever;
}
public void setLever(int lever) {
this.lever = lever;
}
public void setOutput(double output) {
this.output = output;
}
public void up(){
if(this.lever0||this.lever1||this.lever2) {
this.lever++;
}
else {
return;
}
}
public void down() {
if(this.lever1||this.lever2||this.lever3) {
this.lever--;
}
else {
return;
}
}
public void ele(){
this.output=0.3this.lever220;
}
public double getOutput() {
return output;
}

}
这是分档开关类,但在里面却有通电的方法,没有保证单一职责原则。
(5).总结:
写了这么多次pta之后,发现类的设计是非常重要的,不然代码就会显得非常复杂,导致自己都看不懂自己的代码,且代码要具有复用性,不能是所谓的“一次性”代码,我总是急于求成,拿到题目的第一时间就开始下手,写出了很多只为了当下能过一些测试点的一次性代码,后期根本无法进行迭代,导致每一次写得都非常的痛苦,一坐就是一天,然后也过不了什么测试点。

如在这个建议类图上,我并没有按照给出的类图设计控制设备类与受控设备类,导致后面实现不了多态,然后就写了无数的if-else,导致非常的痛苦。
在pta发布的第一时间,我并没有仔细看题目,看题目总是走马观花:
本题不考虑输入电压或电压差超过220V的情况。

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

本题中的并联信息所包含的串联电路的信息都在并联信息之前输入,不考虑乱序输入的情况。
只要不因短路而造成无穷大的电流烧坏电路(如电路中的部分短接),都是合理情况,在测试点的考虑范围之内。会造成无穷大的电流的短路本次迭代不考虑。

本次迭代考虑多个并联电路串联在一起的情况。

本题考虑一条串联电路中包含其他串联电路的情况。例如:

T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]

本例中T1\T2两条串联电路T3的一个部分,本题考虑这种类型的输入。
在写题目的时候我都没有仔细观察这个条件,导致写的非常的纠结,直到看到了这个条件我才恍然大悟。
在第八次pta的设计上:
受控串联的电路符号为S,其最低工作电压为50V,电压达到或超过50V,窗帘即可正常工作,不考虑室外光照强度和室内空间大小等因素,窗帘受室内灯光的光照强度控制。
当电路中所有灯光的光照强度总和在[0,50)lux范围内,窗帘全开;
在[50,100)lux范围内,窗帘打开比例为0.8;
在[100,200)lux范围内,窗帘打开比例为0.6;
在[200,300)lux范围内,窗帘打开比例为0.4;
在[300,400)lux范围内,窗帘打开比例为0.2;
在400lux及以上范围内,窗帘关闭。
当电压低于50V,窗帘不工作,默认为全开状态。
如果电路中没有灯或者灯全部关闭,光照强度为0,窗帘处于全开状态。
这个条件我也没有看清楚,将窗帘的打开比例设置错了。所以导致结果输出都是错的。
import java.util.;
import java.util.regex.;
class Equipment{
private int node;
public Equipment() {}
public int getNode() {
return node;
}

public void setNode(int node) {
this.node = node;
}

public Equipment(int node) {
super();
this.node = node;
}
}
class Switch extends Equipment implements Comparable{
private int state=0;
public void change() {
if(this.state0) {
this.state=1;
}
else {
this.state=0;
}
}
public Switch(int node) {
super(node);
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
@Override
public int compareTo(Switch ss) {
return Integer.compare(super.getNode(),ss.getNode());
}
}
class Fswitch extends Equipment{
private int lever=0;
private double output=0;
public Fswitch(int node) {
super(node);
}
public int getLever() {
return lever;
}
public void setLever(int lever) {
this.lever = lever;
}
public void setOutput(double output) {
this.output = output;
}
public void up(){
if(this.lever0||this.lever1||this.lever2) {
this.lever++;
}
else {
return;
}
}
public void down() {
if(this.lever1||this.lever2||this.lever==3) {
this.lever--;
}
else {
return;
}
}
public void ele(){
this.output=0.3this.lever220;
}
public double getOutput() {
return output;
}

}
class Lswitch extends Equipment{
private double lever=0;
private double output=0;
public Lswitch(int node) {
super(node);
}
public double getLever() {
return lever;
}
public void setLever(double lever) {
this.lever = lever;
}
public double getOutput() {
return output;
}
public void ele() {
this.output=220*this.lever;
}

}
class Blamp extends Equipment{
private double light;
public Blamp(int node) {
super(node);
}
public double getLight() {
return light;
}
public void eleLight(double v) {
if(v>0&&v<=9) {
this.light=0;
}
else if(v>=9&&v<=10) {
this.light=50(v-9);
}
else if(v>10&&v<=220) {
this.light=(v-10)(5.0/7.0)+50;
}
}

}
class Rlamp extends Equipment{
private double light;
public Rlamp(int node) {
super(node);
}
public double getLight() {
return light;
}
public void eleLight(double v) {
if(v==0) {
this.light=0;
}
else {
this.light=180;
}
}
}
class Fan extends Equipment{
private double roll;
public double getRoll() {
return roll;
}

public void setRoll(double roll) {
this.roll = roll;
}
public Fan(int node) {
super(node);
}
public void eleroll(double v) {
if(v<80){
this.roll=0;
}
else if(v>=80&&v<=150){
this.roll=(v-80)4+80;
}
else if(v>150) {
this.roll=360;
}
}
}
public class Main {
public static void main(String[] args) {
ArrayListalls=new ArrayList();
Fswitch F1=null;
Lswitch L1=null;
Blamp B1=null;
Rlamp R1=null;
Fan fan1=null;
//ArrayListall=new ArrayList();
Scanner input=new Scanner(System.in);
while(input.hasNext()) {
String s=input.nextLine();
if(s.equals("end")) {
break;
}
else {
if(s.startsWith("[")) {
String regex="[K|F|L|B|R|D]\d-1";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
char first=matcher.group().charAt(0);
if(first'K') {
Switch stem=new Switch((int)(matcher.group().charAt(1))-48);
alls.add(stem);
}
else if(first'F') {
Fswitch stem=new Fswitch((int)(matcher.group().charAt(1))-48);
F1=stem;
}
else if(first'L') {
Lswitch stem=new Lswitch((int)(matcher.group().charAt(1))-48);
L1=stem;
}
else if(first'B') {
Blamp stem=new Blamp((int)(matcher.group().charAt(1))-48);
B1=stem;
}
else if(first'R') {
Rlamp stem=new Rlamp((int)(matcher.group().charAt(1))-48);
R1=stem;
}
else if(first'D') {
Fan stem=new Fan((int)(matcher.group().charAt(1))-48);
fan1=stem;
}
}
}
else if(s.startsWith("#")) {
if(s.contains("K")) {
int num=(int)(s.charAt(2))-48;
for(Switch tem:alls) {
if(tem.getNode()num) {
tem.change();
}
}
}
else if(s.contains("F")) {
if(s.contains("-")) {
F1.down();
}
else if(s.contains("+")) {
F1.up();
}
}
else if(s.contains("L")) {
String regex="[0-9]+.?[0-9]
";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
double lever= Double.parseDouble(matcher.group());
L1.setLever(lever);
}
}
}
}
}
Collections.sort(alls);
boolean ele=true;
for(Switch s:alls) {
System.out.print("@K"+s.getNode()+"

标签:总结,引脚,int,System,pta,else,public,getNode
From: https://www.cnblogs.com/luailu/p/18276904

相关文章

  • 第三次学习总结
    Java,作为一门广泛应用的编程语言,已经深深地影响了软件开发领域。随着互联网技术的飞速发展,Java在服务器端、移动端、嵌入式系统等领域都发挥着重要的作用。本文将从Java的基本概念、特性、核心技术以及实际应用等方面进行总结,以期帮助初学者更好地掌握Java编程技能。Java是一种面......
  • OO题目集7~8总结
    OO题目集7~8总结​最后的两次题目集主要是对家具强电电路模拟程序的迭代设计,第7次题目集添加了电路元件互斥开关和窗帘,第8次则是添加了二极管元件,新的题目对于创新和思考能力以及思维逻辑能力要求更高了,主要是电路元件和电路系统的功能越来越复杂,比较难用代码体现一个完整的......
  • 题目集7~8的总结
    目录一.前言 nchu-software-oop-2024-上-7~知识点 nchu-software-oop-2024-上-6~知识点二.设计与分析一.家居强电电路模拟程序-3多个并联电路:互斥开关:二.家居强电电路模拟程序-4二极管:输出内容:三.踩坑心得1.字典序排序2.多个互斥开关3.连续调速器4.排查不周4.改进建议1.if-els......
  • PTA7-8总结
    前言知识点PTA7:这是一个模拟电路系统的Java程序,其中定义了多种电路组件(如开关、调速器、灯泡、风扇等),并模拟了它们的交互和行为。下面是对代码的详细分析:类和继承Circuit类:这是一个抽象基类,定义了所有电路组件共有的方法,如设置输入电压、显示状态等。Switch类:继承自Ci......
  • 大模型实战1年半,总结一下在企业落地的三个策略
    节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。总结链接如下:《大模型面试宝典》(2024......
  • 数据库查询总结
     select语句SELECT语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。select语句语法格式SELECT[ALL|DISTINCT]输出表达式,...[FROM表名1[,表名2].....]/*FROM子句*/[WHERE条件]/*WHERE子......
  • PTA题目集7~8的总结性Blog
    前言:对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是第8次题目集的题目......
  • pta java
    R7-1标识符命名方式转换:Camel2Snake分数10在程序设计语言中,标识符都不能包含空格。如果我们需要使用两个或两个以上的单词来命名标识符,目前的工程实际中有两种常用的命名方式:Snake方式和Camel方式。Snake方式是指单词用小写字母,单词间下划线(“_”)代替空格;Camel方式是指相......
  • 51 stm32开发关于keil mdk的软件配置常用设置 以及 可能会出现的报错总结
    首先左上角那个魔术棒中,是关于下载烧录软件编译的option选择我们点开他进入target需要我们配置的就两处,1:Xtal:填8.0mhz只是因为要填个数代表stm32(外部高速晶振)或(其他晶振)作为主频时钟的时钟源时的晶振大小方便烧录时对一些代码(对芯片的时钟要求高的代码)的自动编译,实际上......
  • 飞行器飞行动力学总结
    飞行器飞行动力学总结基本空气动力学原理标准大气压101325Pa=1atm海平面大气密度1.225Kg/m3标准情况下的大气R=287J/(kg·K)引言影响飞机性能、稳定性、操纵性的关键参数雷诺数\(Re=\dfrac{\rhoV_{\infty}L}{\mu}\):惯性力与粘性力的比值牛顿流体指的是满......