首页 > 其他分享 >PTA题目集7、8的总结

PTA题目集7、8的总结

时间:2024-06-30 23:44:55浏览次数:18  
标签:总结 题目 get getC PTA cd 电路 getLeftV getRightV

**前言**

1.第七次题目集的7-1在家居强电电路模拟程序-2的基础上新增了一些内容,控制设备增加了一个互斥开关,比较麻烦的是互斥开关不同的引脚相接其电阻并不相同,而且要从输入信息中读取互斥开关的状态也有点难度,与其他设备不同的是,互斥开关可以出现在一个或两个串联电路中,更加考验我们的算法设计能力以解决准确读取互斥开关状态的问题。另外,本次迭代还加入了新的受控设备———窗帘,有意思的是窗帘的打开程度与电路中所有发光设备的总亮度有光,需要记录电路中的总亮度。这次题目的输入格式更加复杂,因为本次迭代考虑多个并联电路串联在一起的情况和一条串联电路中包含其他串联电路的情况,很好的考察了我们对于信息的处理能力、对字符串和数组相关知识点的掌握还有使用面向对象方法编程的熟练度。此外,相比于前面两题,这次题目的要求更加***钻和细致,非常考验我们当前对于Java语言的熟练度以及较强的逻辑思维和算法设计能力。这次题目的工作量相对较大,对我来说操作难度比较大,需要花费很长的时间来完成。

2.第八次题目集的7-1家居强电电路模拟程序-3是一道非常有难度的题目,题干非常的长,看完容易使人望而生畏。这就很考验我们的信息阅读和信息提取的能力,需要从长篇大论中总结出与我们编写Java程序有关的数据和条件加以整合,还是比较麻烦的。本次作业用到了Java中继承、多态的知识,让我对涉及到的Java知识点更加熟悉,同时还用到了电路相关的基础知识,综合性非常强。本次迭代增加了新的电路设备————二极管,让题目的内容变得更加丰富。另外,在本题中,并联电路M中的串联电路可以包含别的并联电路。最夸张的是增加管脚电压的显示,在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。让我花费了大量的时间来设计正确输出该电器每个管脚的电压的算法,非常有难度啊,写的时候感觉要崩溃了,因为水平确实有限啊。相比于上次题目,本次迭代对我们读取所有电路设备有了更加精确和完整的要求,不能模糊化处理任何电路设备,每个电路设备的所有属性都要准确地得到,非常考验整体思维。

**设计与分析**

1.第七次题目集7-1首先根据题目要求创建好所有的类,再根据细节对类的属性和方法等进行补充。UML类图如下:

 本题的重点在于通过读取控制设备的状态获得电路的总电压,再根据总电压求出各受控设备的亮度或速度。容易被忽略的是,本题中的控制设备——开关可以重复出现,而连续调速器和分档调速器最多只能出现其一并且不能同时出现,而且只能直接连VCC。假如电路中有连续调速器或者分档调速器,根据输入信息读取level,再计算出电路电压,最后判断开关是否全部打开;假如电路中既没有分档调速器,也没有连续调速器,只需要判断开关是否全部打开(如果电路中存在开关的话),若全部打开电压为220V,否则为0V。得到电路的总电压后就可以根据受控设备的条件求出相应的亮度(或转速)。 互斥开关的引脚可以重复出现,要准确获取它的连接情况。窗帘主要在于求出电路中的总亮度,获取它的打开程度。

我设计的互斥开关类的代码如下:

 1 class MutexSwitch extends ControlDevice {
 2     boolean on;
 3 
 4     public MutexSwitch(double voltage, String name, double level, String input) {
 5         super(voltage, name, level, input);
 6         this.on = true;
 7     }
 8 
 9     public void changeOn() {
10         if (!on) {
11             on = true;
12         } else {
13             on = false;
14         }
15     }
16 
17     public double getR() {
18         if (on) {
19             return 5;
20         } else {
21             return 10;
22         }
23     }
24 
25     public void output() {
26         if (!on){
27             System.out.println("@" + getName() + ":turned on");
28         } else {
29             System.out.println("@" + getName() + ":closed");
30         }
31     }
32 }

在读取输入信息时获取互斥开关的基础状态,代码如下:

 1 case 'H':
 2     int index = 0;
 3     for (int j = 0; j < h.size(); j++) {
 4       index = input.indexOf("[H", index + 2);
 5       int index1 = input.indexOf('-', index);
 6       int index2 = input.lastIndexOf(']', index);
 7       char p = input.charAt(index1 + 1);
 8       char q = input.charAt(index2 - 1);
 9       if (p == '2' || q == '2') {
10            r0 += 5;
11        } else {
12            r0 += 10;
13        }
14        break;
15     }

使用String类的indexOf()方法得到‘H’在字符串中的下标,再通过下标使用charAt()方法判断引脚的数字是‘2’还是‘3’,从而得到接入电路中的是互斥开关的哪一部分,同时得到其正确的的电阻。

我设计的窗帘类的代码如下:

 1 class Curtain extends ControlledDevice {
 2     double light;
 3     int openScale;
 4 
 5     public Curtain(double voltage, String name, String input) {
 6         super(voltage, name, input);
 7     }
 8 
 9     public void setLight(double light) {
10         this.light = light;
11     }
12 
13     public void output() {
14         System.out.println("@" + getName() + ":" + openScale + "%");
15     }
16 }

本次迭代只需在上次题目的基础上增加一些新的内容,如果写出了上次的题目的话,这次的题目应该也能做出来。

3.第六次题目集7-1在第五次的基础上增加了一些要求。UML类图如下:

 

增加了并联电路中的并联电路,要考虑受控设备的电阻,让电路变得更加复杂,所要考虑的东西也更多了。 以串联电路类为主体,从单个的串联电路开始分析。 该方法读取一条串联电路中的所有电路设备,放在ArrayList数组里,同时得到设备的名字。 该方法用于判断一条串联电路是否处于通路状态(是返回true,否返回false)。 该方法用于返回处于通路状态下的一条串联电路上所有受控设备的总电阻。 大概的思路如下: 读取输入信息,根据输入信息创建相应的串联电路类和并联电路类对象 读取输入信息中所有开关的操作情况 根据所有控制设备的状态求出主电路的电压 求出各并联电路的电阻进而求出整个电路(主电路)的总电阻 计算求出每个串联电路(除主电路外)的分压 根据受控设备的分压求出每个受控设备的亮度(或转速) 根据题目要求排序输出所有电路设备的工作状态。与上次迭代相比,这次的题目要求对所有电路设备的属性都有精确的输出。最麻烦的就是需要获取每个电路设备两个管脚的电压,算法设计起来还是比较复杂的,感觉同一个串联电路中相邻的电路设备的管脚电压的求法有点类似于递归,最重要的就是得到每个串联电路最左端的电压。有了最左端的电压以后,就可以根据每个电路设备的电压求出它们的俩个管脚的电压。代码实现如下:

  1 for (int i = 1; i < cd.getC().size(); i++) {
  2             for (int j = 0; j < b.size(); j++) {
  3                 if (cd.getC().get(i).name.equals(b.get(j).name)) {
  4                     b.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
  5                     b.get(j).setRightV(b.get(j).getLeftV() - (int)b.get(j).voltage);
  6                     cd.getC().get(i).setLeftV(b.get(j).getLeftV());
  7                     cd.getC().get(i).setRightV(b.get(j).getRightV());
  8                 }
  9             }
 10             for (int j = 0; j < r.size(); j++) {
 11                 if (cd.getC().get(i).name.equals(r.get(j).name)) {
 12                     r.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 13                     r.get(j).setRightV(r.get(j).getLeftV() - (int)r.get(j).voltage);
 14                     cd.getC().get(i).setLeftV(r.get(j).getLeftV());
 15                     cd.getC().get(i).setRightV(r.get(j).getRightV());
 16                 }
 17             }
 18             for (int j = 0; j < d.size(); j++) {
 19                 if (cd.getC().get(i).name.equals(d.get(j).name)) {
 20                     d.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 21                     d.get(j).setRightV(d.get(j).getLeftV() - (int)d.get(j).voltage);
 22                     cd.getC().get(i).setLeftV(d.get(j).getLeftV());
 23                     cd.getC().get(i).setRightV(d.get(j).getRightV());
 24                 }
 25             }
 26             for (int j = 0; j < a.size(); j++) {
 27                 if (cd.getC().get(i).name.equals(a.get(j).name)) {
 28                     a.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 29                     a.get(j).setRightV(a.get(j).getLeftV() - (int)a.get(j).voltage);
 30                     cd.getC().get(i).setLeftV(a.get(j).getLeftV());
 31                     cd.getC().get(i).setRightV(a.get(j).getRightV());
 32                 }
 33             }
 34             for (int j = 0; j < c.size(); j++) {
 35                 if (cd.getC().get(i).name.equals(c.get(j).name)) {
 36                     c.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 37                     c.get(j).setRightV(c.get(j).getLeftV() - (int)c.get(j).voltage);
 38                     cd.getC().get(i).setLeftV(c.get(j).getLeftV());
 39                     cd.getC().get(i).setRightV(c.get(j).getRightV());
 40                 }
 41             }
 42             for (int j = 0; j < k.size(); j++) {
 43                 if (cd.getC().get(i).name.equals(k.get(j).name)) {
 44                     k.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 45                     cd.getC().get(i).setLeftV(k.get(j).getLeftV());
 46                     if (k.get(j).on) {
 47                         k.get(j).setRightV(k.get(j).getLeftV());
 48                     } else {
 49                         k.get(j).setRightV(0);
 50                     }
 51                     cd.getC().get(i).setRightV(k.get(j).getRightV());
 52                 }
 53             }
 54             for (int j = 0; j < h.size(); j++) {
 55                 if (cd.getC().get(i).name.equals(h.get(j).name)) {
 56                     h.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
 57                     cd.getC().get(i).setLeftV(h.get(j).getLeftV());
 58                     if (s.withH) {
 59                         h.get(j).setRightV(0);
 60                         if (h.get(j).on) {
 61                             if (h.get(j).front) {
 62                                 h.get(j).setV1(h.get(j).getLeftV());
 63                             } else {
 64                                 h.get(j).setV3(h.get(j).getLeftV());
 65                             }
 66                         } else {
 67                             if (h.get(j).front) {
 68                                 h.get(j).setV1(h.get(j).getLeftV());
 69                             } else {
 70                                 h.get(j).setV2(h.get(j).getLeftV());
 71                             }
 72                         }
 73                     } else {
 74                         h.get(j).setRightV(h.get(j).getLeftV() - (int)h.get(j).voltage);
 75                         if (h.get(j).on) {
 76                             if (h.get(j).front) {
 77                                 h.get(j).setV1(h.get(j).getLeftV());
 78                                 h.get(j).setV2(h.get(j).getRightV());
 79                             } else {
 80                                 h.get(j).setV1(h.get(j).getRightV());
 81                                 h.get(j).setV2(h.get(j).getLeftV());
 82                             }
 83                         } else {
 84                             if (h.get(j).front) {
 85                                 h.get(j).setV1(h.get(j).getLeftV());
 86                                 h.get(j).setV3(h.get(j).getRightV());
 87                             } else {
 88                                 h.get(j).setV1(h.get(j).getRightV());
 89                                 h.get(j).setV3(h.get(j).getLeftV());
 90                             }
 91                         }
 92                     }
 93                     cd.getC().get(i).setRightV(h.get(j).getRightV());
 94                 }
 95             }
 96             for (int j = 0; j < e.size(); j++) {
 97                 if (cd.getC().get(i).name.equals(e.get(j).name)) {
 98                     if (e.get(j).isOn()) {
 99                         e.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
100                         e.get(j).setRightV(e.get(j).getLeftV());
101                         cd.getC().get(i).setLeftV(e.get(j).getLeftV());
102                         cd.getC().get(i).setRightV(e.get(j).getRightV());
103                     } else {
104                         e.get(j).setLeftV(0);
105                         e.get(j).setRightV(cd.getC().get(i - 1).getRightV());
106                         cd.getC().get(i).setLeftV(e.get(j).getRightV());
107                         cd.getC().get(i).setRightV(e.get(j).getLeftV());
108                     }
109                 }
110             }
111             for (int j = 0; j < m.size(); j++) {
112                 if (cd.getC().get(i).name.equals(m.get(j).name)) {
113                     m.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
114                     m.get(j).setRightV(m.get(j).getLeftV() - (int) m.get(j).voltage);
115                     cd.getC().get(i).setLeftV(m.get(j).getLeftV());
116                     cd.getC().get(i).setRightV(m.get(j).getRightV());
117                 }
118             }
119             for (int j = 0; j < t.size(); j++) {
120                 if (cd.getC().get(i).name.equals(t.get(j).name)) {
121                     t.get(j).setLeftV(cd.getC().get(i - 1).getRightV());
122                     t.get(j).setRightV(m.get(j).getLeftV() - (int) t.get(j).voltage);
123                     cd.getC().get(i).setLeftV(t.get(j).getLeftV());
124                     cd.getC().get(i).setRightV(t.get(j).getRightV());
125                 }
126             }
127         }

但是运行之后还是有很多问题,也不知道要怎么解决,毕竟实力不允许[笑哭]。但是通过这几次PTA的练习,我对Java语言的掌握程度越来越深,也会更敢于去挑战一些难题。

**踩坑心得**

第七次PTA: 没有充分理解题目的意思,忽略了一些细节。比如,题目给的输入样例里,互斥开关都是作为连接两个串联电路的枢纽,所以一开始做题时没有考虑到互斥开关只有一个管脚接入电路,也就是另一个管脚没有用到的情况,但是又没有发现是这个问题,所以不管怎么改还是这么多分,最后经过同学提醒后才醒悟过来没有考虑到这种情况,浪费了很多时间,追悔莫及。 没有养成良好的编写代码的习惯。写代码时常常忽略用private将成员变量私有化,对有些Java知识点的概念比较模糊,还有很大的进步空间。 写代码的时候容易写着写着脑子就乱了,逻辑混乱,需要多写多练多思考加强编程能力。 写出来的代码比较冗长且可读性不是很强,还需要优化自己写的代码,让它变得更加简练高效并且逻辑清晰。 

第八次PTA:通过第八次PTA我发现第七次PTA提交的代码有很多不足的地方,对于那些没有要求输出信息的设备,都是采取模糊处理的方法,所以第八次PTA在对所有电路设备有了更加精确的要求之后,之前写的代码基本作废了,需要进行大量的修改和重写。感觉这次算法设计的很糟糕,导致主函数的代码写起来非常麻烦,写到后面都写不下去了。所以以后一定要根据题目要求更加合理地设计类的属性和方法,从而让自己的代码更加简洁和高效。

 

通过这两次题目集的磨练,我不仅巩固了Java基础语法,还应用了面向对象编程(OOP)的原则,如封装、继承和多态性,使我对Java的应用有了更广泛的了解。 通过家居强电电路模拟程序的开发,我学习到了如何用Java实现复杂逻辑的建模,以及如何将实际问题转化为程序可解决的方式。 尽管在知识掌握上取得了一定的进步,但也存在一些不足之处。例如,对于复杂的电路模拟,我发现我的算法设计能力还有待提高,程序优化方面也缺乏经验。 针对上述不足,我计划采取以下措施进行改进: 加强算法学习:通过学习计算机科学中的高级算法和数据结构,提高问题解决的效率和质量。 实践项目优化:通过性能分析和调优,提升程序运行效率,增强代码的可维护性和可扩展性。 学习设计模式:深入理解并实践常见的设计模式,提高软件设计的合理性和代码的复用性。 跨学科应用:由于家居强电电路涉及电子学知识,我需要补充相关领域的知识,以更好地理解和模拟电路的行为。在完成作业的过程中,我遇到了许多挑战,比如理解复杂的题目和调试代码错误。这些挑战让我学会了耐心和坚持,我会将这些经历视为宝贵的学习机会,帮助我在未来的学习和工作中保持积极的心态。通过这两次题目集的训练,我不仅提升了自己的编程技能,还学会了如何将编程知识应用于实际问题解决中。接下来的重点是提高自己在算法设计、程序优化和跨学科应用方面的能力,以适应更复杂和挑战性的编程任务。此外,我深刻认识到学习Java语言理论知识与实践操作相结合的重要性。在未来的学习中,我将更加注重实践,通过动手操作来巩固和深化理解。 

标签:总结,题目,get,getC,PTA,cd,电路,getLeftV,getRightV
From: https://www.cnblogs.com/worldpeacecyzzl/p/18277018

相关文章

  • 深度学习CUDA Out of Memory原因总结和方法
    CUDAOutofMemory原因总结和方法原因总结显存不足:深度学习模型(尤其是大型模型)在训练或推理时需要大量的显存。如果显存容量不足,会导致CUDAOutofMemory错误。批处理大小过大:在训练过程中,批处理(batch)大小设置过大时,会占用过多的显存,导致显存溢出。模型过大:模型......
  • 题目集7~8的总结性Blog
    7-7家居强电电路模拟程序-3分数70退出全屏作者 蔡轲单位 南昌航空大学智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务......
  • MySQL 索引之外的相关查询优化总结
    在这之前先说明几个概念:1、驱动表和被驱动表:驱动表是主表,被驱动表是从表、非驱动表。驱动表和被驱动表并非根据from后面表名的先后顺序而确定,而是根据explain语句查询得到的顺序确定;展示在前面的是驱动表,后面的是非驱动表。2、关联查询的类型非为:内连接(innerjoin)、......
  • 7~8题目集总结
    1.前言:题目集的知识点通常涵盖Java的各种特性和编程概念,如基本语言结构(循环、选择、数组等)、面向对象特性(类的定义、对象创建、封装、继承、多态等)、数据类型、字符串处理、正则表达式、算法等。这两次题目集难度较高,涉及复杂的逻辑和算法,需要深入思考和分析才能找到解决方案,可......
  • 第7-8次OOP总结
    一.前言1.第七次PTA在基于原有的基础上通过迭代新增加了互斥开关以及新电器窗帘,并且更加复杂化了电路的结构,使得电路可以并联一个并联电路,在原有的基础上大大增加的分压计算的难度。2.第八次PTA又新增了二极管,并且在原有只需要表示出电器的工作效率的基础上新增加了每个电器的管......
  • 题目集7~8的总结
    一、 前言题目七涉及知识点:类与对象:定义电路设备类、受控设备类、控制设备类、串联电路类、并联电路类等,并描述它们的公共特征和属性。继承与多态:实现受控设备类、控制设备类、串联电路类、并联电路类对电路设备类的继承,并实现多态。数组与字符串:处理输入的连接信息和电路信......
  • 验证二叉搜索树 前序 中序 后序的三种解法 - 灵神视频总结
    这节课用三种方法来验证一颗二叉树是否是搜索树。递归的基础知识:看到递归就晕?带你理解递归的本质!--灵神视频总结-CSDN博客如何灵活运用递归?-灵神视频总结-CSDN博客98.验证二叉搜索树二叉搜索树的定义:给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树......
  • PTA题目集7~8的总结
    前言本次题目集的题量少,但是难度较高,尤其是题目集8.设计与分析题目:智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提......
  • 对7~8次pta的总结
    (1).前言:第七次pta难度很大,主要体现在互斥开关的设计上:互斥开关:互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、......
  • 第三次学习总结
    Java,作为一门广泛应用的编程语言,已经深深地影响了软件开发领域。随着互联网技术的飞速发展,Java在服务器端、移动端、嵌入式系统等领域都发挥着重要的作用。本文将从Java的基本概念、特性、核心技术以及实际应用等方面进行总结,以期帮助初学者更好地掌握Java编程技能。Java是一种面......