PTA4~6次作业总结

news/2024/10/15 20:24:36

(1)前言:
不同于大一上的c语言的PTA作业,java的PTA作业越来越贴近生活中的需求,难度也越来越大了,代码的设计量和题目考察的知识点也是.最后一次作业没有给测试样例,导致有几个点没过,不知道错哪了,测不出来,非常的难受.
这次作业使用了ArryList
先了解下ArryList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。

1.ArrayList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
代码如下(示例):

import java.util.ArrayList; // 引入 ArrayList 类ArrayList<E> objectName =new ArrayList<>();  // 初始化

E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
objectName: 对象名
ArrayList 中的元素实际上是对象,在以上实例中,数组列表元素都是字符串 String 类型。

如果我们要存储其他类型,而 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。

基本类型对应的包装类表如下:

Java ArrayList 常用方法列表如下:

(2)设计与分析:
这次新加的连续题目集,家庭电路,思路非常的简单,但是其中的计算有些难搞.(头大)
题目的设计图老师给了
设计建议:

1、电路设备类:描述所有电路设备的公共特征。

2、受控设备类、控制设备类:对应受控、控制设备

3、串联电路类:一条由多个电路设备构成的串联电路,也看成是一个独立的电路设备

其他类以及类的属性、方法自行设计。

就照着老师给的照搬了下来,省事嘿嘿.(-)

一开始看到题目说把串联电路类看成是一个独立的电路设备时都懵了,不知道啥意思,后向想了想后面要遍历串并联电路才好做,所以要把它看成一个特殊的电路设备.

输入:
题目给的样例是这样的

这让我想起了上次大作业的答题的输入,所以我选择了通过正则表达式来获取输入信息

                String regStr = "(([\\w])[\\d])\\-1";String regStr1="(T[\\d])";String regStr2 = "(([\\w])[\\d])\\-IN";Pattern pattern = Pattern.compile(regStr);Pattern pattern1 = Pattern.compile(regStr1);Pattern pattern2 = Pattern.compile(regStr2);Matcher matcher = pattern.matcher(str);Matcher matcher1 = pattern1.matcher(str);Matcher matcher2 = pattern2.matcher(str);if(matcher1.find()){seriesCircuits1.setName(matcher1.group());

获取完信息后,我才用ArryList将一个个数据储存

 while (matcher.find()){if (matcher.group(2).compareTo("K") == 0) {K k = new K();k.setName(matcher.group(1));equipment1.add(k);equipment.add(k);}if (matcher.group(2).compareTo("F") == 0) {F f = new F();f.setName(matcher.group(1));equipment1.add(f);equipment.add(f);}if (matcher.group(2).compareTo("L") == 0) {L l = new L();l.setName(matcher.group(1));equipment1.add(l);equipment.add(l);}if (matcher.group(2).compareTo("B") == 0) {B b = new B();b.setName(matcher.group(1));b.setResistance(10);equipment1.add(b);equipment.add(b);}if (matcher.group(2).compareTo("R") == 0) {R r = new R();r.setName(matcher.group(1));r.setResistance(5);equipment1.add(r);equipment.add(r);}if (matcher.group(2).compareTo("D") == 0) {D d = new D();d.setName(matcher.group(1));d.setResistance(20);equipment1.add(d);equipment.add(d);}if (matcher.group(2).compareTo("A") == 0) {A a = new A();a.setName(matcher.group(1));a.setResistance(20);equipment1.add(a);equipment.add(a);}if(matcher2.find()){M m = new M();m.setName(matcher2.group(1));equipment1.add(m);}str = str.substring(matcher.end());matcher = pattern.matcher(str);}

搞完这个就要准备计算了,因为要求在最后再来处理精度的问题,
使用前面的数据传递使用的都是Double类型;
所有的计算都通过各自的类的方法进行,让主函数里的代码看起来更加简洁
这里用到了多态,例如:
计算电阻时,因为串联电路和并联电路电阻的计算方法不一样,但都需要计算他们的电阻,所以在他们的父类中定义了求电阻的方法,再在串联电路和并联电路中重写方法,实习不同方式的求电阻,即实现了多态.


最后输出是要对所有电器进行排序:

 public int compareTo(Equipment o) {String[] str={"K","F","L","B","R","D","A"};for(int i=0;i<str.length;i++){if(this.getName().startsWith(str[i])){for(int j=0;j<str.length;j++){if(o.getName().startsWith(str[j])) {if (i < j)return -1;else if (i == j)return this.getName().charAt(1)-o.getName().charAt(1);elsereturn 0;}}}}return 0;}

使得电器按照一定顺序输出.

这道题的思路如图:

(3)采坑心得:这次作业第一次提交发现数据对不上,检查都发现是在传递数据时就把数据搞成整数了,后面的部分直接被丢弃了,导致后续计算出了问题.
后面又发现再有多个开关时,电路的开关有问题,当一个开关开,一个开关闭时,电路竟然是通电的,被自己整笑了当时.后面改进的电路闭合判断的代码;

public boolean isLink(){link=true;for (Equipment equipment1 : equipments) {if (equipment1.getName().charAt(0) == 'K') {K k1 = (K) equipment1;if (k1.isOn_off()) {link = false;}}}return link;}

在第一次作业时,我是通过关注输入电压输出电压的方式去计算整个电路,第一次作业没考虑电阻,我是直接遍历这个电路,从头开始一个个传递电压.

int size = equipment.size();for (int i = 0; i < size-1; i++) {Equipment equipment1=equipment.get(i);if(equipment1.getName().charAt(0)=='K'){K k1=(K)equipment1;equipment.get(i+1).setInput(k1.getOutput());}if(equipment1.getName().charAt(0)=='F'){F f1=(F)equipment1;equipment.get(i+1).setInput(f1.getOutput());}if(equipment1.getName().charAt(0)=='L'){L l1=(L)equipment1;equipment.get(i+1).setInput(l1.getOutput());}if(equipment1.getName().charAt(0)=='B'){B b1=(B)equipment1;equipment.get(i+1).setInput(b1.getOutput());}if(equipment1.getName().charAt(0)=='R'){R r1=(R)equipment1;equipment.get(i+1).setInput(r1.getOutput());}if(equipment1.getName().charAt(0)=='D'){D d1=(D)equipment1;equipment.get(i+1).setInput(d1.getOutput());}}

到第二次作业时要考虑电阻了,发现第一次的方法做不了,就改成求电流先,再去计算每个电路设备说占电压.
(4)改进建议:计算方面要多搞几个样例测试,进一步提高代码的简洁性,复用性,整个设计结构要优化,使得下次作业时也能用上现在的结构,不用再去大改.
正则表达式那块可以剔除点,匹配一部分即可,但需要多次匹配.

(5)总结:
这次作业让我越来越熟练的使用正则表达式去获取信息,认识了正则的效率问题.认识到实际工程中程序对各种不同状况做出的反应都应该符合用户需求。还有在数据传递中的数据完整性问题,在这种对数据准确度要求高的情景下,要尽可能的保存传递完整的数据,不要"缺斤少两".最后,最最重要的就是加强了面向对象的思维。

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

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

相关文章

构建和谐网络环境:AI敏感词屏蔽技术的应用与挑战

在当今信息爆炸的时代,网络空间的信息安全和言论自由之间的平衡成为了一个重要议题。为了维护网络环境的健康发展,一种能够自动屏蔽敏感词的AI技术应运而生。本文将结合“智谱清言”的智能体“净言”为例,探讨AI敏感词屏蔽技术的应用及其面临的挑战。 一、AI敏感词屏蔽技术的…

Ubuntu基础环境配置

博主:Agony‍ 下载ubuntu地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/选择你所需要的版本下载即可‍ root设置ubuntu系统搭建好之后‍打开终端。输入以下命令来切换到root用户(如果您当前用户有sudo权限): sudo su或者,如果您已经有了root用户并知道密码…

南昌航空大学pta总结

前言 背景介绍: 继上次PTA题目讲解完,本次博客会进行对后几次题目集的讲解说明和题后总结 目的和目标: 及时反馈学习成果,达到学由所会,及时吸收和深入学习的目的 学习收益: 通过后面几次的题目学习,使得我对java的语法代码以及运用熟练度有了极大的进步,同时也对学习代码…

两次pta题目总结

两次pta题目总结 写在前面 这两次pta是新题目,上次那个答题判题的没有继续迭代了,根据这两次题目我也学到了一些东西,主要是面向对象设计模式的运用,接口的使用,以及递归算法的使用等等 第一题题目内容: 智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版 VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) …

第二次Blog作业

此次Blog为题目集4-6的总结性内容 前言(题目集总结) 第四次题目集 (此次题目集为答题判题程序的最后一版,综合性最强,总体偏难) 1.知识点 字符串解析与处理: 程序需要能解析和处理各种格式的字符串,包括题目信息、试卷信息、学生信息、答卷信息和删除题目信息。这涉及到…

第二次blog大作业

1.前言 第四次到第六次大作业所覆盖的知识点还是很多的,例如:抽象类,集合,排序方法,接口等等。第四次的大作业是关于学生答卷的流程,考察了我们对于集合和排序算法,以及类与类之间的关系,相比他前面的三个小弟,他增加了多选题和填空题,在难度上还是有所提升的,不过也…

Spring Boot入坑-8-定时任务

概述在企业级的项目业务中,往往会有一系列的任务需要在有逻辑的指定时间点执行,如系统间定时同步数据、定时做某个复杂的计算、订单提交后30分钟需要付款等上述这些,就需要任务的定时调度与执行来完成,这是程序的基本需要在Java语言中,提供了基础的基于Timer和ScheduledEx…