首页 > 其他分享 >PTA题目集4~6的总结

PTA题目集4~6的总结

时间:2024-06-03 11:13:20浏览次数:16  
标签:总结 存储 题目 ArrayList PTA 信息 数组 字符串 匹配

1.前言

知识总结:
1.StringBuilder是一个可变的字符序列,与StringBuffer类似,但不保证同步(即线程不安全)。
它被设计作为StringBuffer的一个简易替换,适用于单线程环境下字符串的频繁拼接和修改操作。
在大多数情况下,由于少了同步的开销,StringBuilder在性能上优于StringBuffer。
2.append():用于向StringBuilder对象追加字符串或其他类型的数据。可以连续调用以拼接多个字符串。
3.toString():将StringBuilder对象转换为String类型的字符串副本。
4.Matcher类是对输入字符串进行解释和匹配操作的引擎。在使用Matcher类进行匹配之前,你需要首先通过Pattern对象的matcher()方法获取一个Matcher对象。然后,你可以使用Matcher类提供的各种方法来进行匹配操作,如find()、start()、end()等,这些方法可以用于查找符合正则表达式的子串并获取其起始位置和结束位置。
5.split函数是一个用于对字符串进行分隔的重要工具。该函数返回一个下标从零开始的一维数组,该数组包含根据指定分隔符拆分的子字符串。
在使用split函数时,需要注意以下几点:
对于特殊字符(如竖线“|”、脱字符“^”、美元符“$”、星号“*”、点号“.”、圆括号“( )”、反斜杠“\”和斜杠“/”等),它们都是正则表达式的一部分,因此如果需要将其作为分隔符,需要在它们前面加上反斜杠“\”进行转义。注意,在Java字符串中,反斜杠本身也需要转义,因此实际上需要写为“\”。
当字符串中有连续的分割符时,split函数会在这些连续的分割符之间产生空字符串。例如,字符串"a,,b"在按照逗号分隔时,会产生一个包含三个元素的数组:["a", "", "b"]。
如果分割符出现在字符串的开头,那么会产生一个或多个空字符串作为数组的元素。
6.charAt是一个用于获取字符串中指定索引位置字符的方法,charAt方法返回的是一个字符,这意味着你可以直接将返回值赋给一个char类型的变量,或者在需要字符操作的地方直接使用它。
7.当将一个较大数据类型的值赋给较小数据类型的变量时(例如,将double赋值给int),需要进行强制转换,因为较小的数据类型可能无法容纳较大的数据类型的所有值。
当将一个对象引用从一个类转换为其子类的引用(或接口的实现类的引用)时,也需要强制转换,因为Java在默认情况下不会进行这种“向上转型”的反向操作。
8.在Java中,动态数组主要通过ArrayList类来实现。ArrayList是Java集合框架的一部分,它提供了动态数组的功能,并封装了底层数组的操作细节。使用ArrayList可以方便地实现动态数组的增删改查操作。
当向ArrayList中添加元素时,如果当前数组容量不足,ArrayList会自动扩容。扩容的规则通常是原容量的1.5倍(但这不是固定的,具体的扩容规则可能会因不同的Java版本或实现而有所差异)。扩容操作会创建一个新的更大的数组,并将原数组中的元素复制到新数组中。这个过程需要一定的时间和内存开销,因此在处理大量数据时需要注意性能问题。
9.定义:继承是面向对象编程中的一个重要特性,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。
关键字:使用extends关键字来表示继承关系。
优点:继承可以提高代码的复用性,减少代码的冗余,使代码更加简洁和易于维护。
题量:第四次的大作业题量有点多,但因为是最后一次迭代,也算是情理之中。
第五与第六次中规中矩。
难度:
第四次的大作业对我而言有点难,最后一次迭代有许多功能,加上我最初的设计不够完善,有些力不从心。
第五因为迭代不深,难度不高。
第六次的类设计有些困难,同时少了样例提示,让人有些摸不着头脑。

2.设计与分析

第四次大作业

设计思路:
输入:
用户输入的问题、答案和文本内容
输出:
对问题进行评分的结果
相应的信息提示
程序设计思路
读取用户输入的问题、答案和文本内容
解析输入并存储相关信息
使用正则表达式对输入进行匹配和分组,提取问题、答案和文本内容
将提取的信息存储在相应的数据结构中,如 question、answer、text 等
对问题进行评分
根据文本内容和答案进行评分,并输出评分结果
根据问题类型,分别处理不同类型的问题
对问题进行精确匹配或部分匹配,得出相应的评分,并输出结果
处理异常情况
对于未匹配到的内容或非法格式,输出相应的错误信息提示
对于各种异常情况进行处理,保证程序的健壮性和友好性
数据结构设计
使用类存储问题、答案和文本内容,如 question、question1、question2、text、answer
使用 ArrayList 存储一组问题、答案等信息,如 nl、kl、zl、tl、sl
使用其他合适的数据结构存储问题类型和相应的处理逻辑

踩坑心得:因为设计不完善,大部分使用了静态数组,导致后续有些围绕数组进行循环的代码因为数组越界而出错。

改进建议:对不同类型的数据以不同的储存方式进行储存。

第五次大作业

设计思路:
正则表达式定义:通过定义多个正则表达式,用于匹配不同格式的字符串。这些正则表达式分别用于匹配以K、F、L、B、R、D开头的字符串,以及匹配特定格式的子字符串等。每个正则表达式都被编译成了Pattern对象,以便后续进行匹配操作。
文本数据的逐行处理:使用Scanner逐行读取标准输入的文本数据,并对每行数据进行处理。对于不同的开头字符,分别使用相应的正则表达式进行匹配,以满足特定格式的要求。
数据统计和存储:通过匹配到的数据,统计各种类型数据的数量,并将匹配到的数据按照规则存储到对应的ArrayList中。例如,使用ArrayList来存储匹配到的K、F、L、B、R、D等类型数据,以及存储匹配到的其他特定信息。
逻辑处理和计算:根据匹配到的数据进行逻辑处理和计算,包括条件判断和数值计算。根据匹配结果进行相应的逻辑判断,并根据逻辑执行相应的计算操作。
结果排序和打印:根据处理后的数据,对存储结果的ArrayList进行排序,并按照特定格式要求将处理后的数据打印到标准输出。

踩坑心得:未对同一类数据进行封装,导致后续进行数据排序时要进行数据匹配十分麻烦。
改进建议:对数据进行合理封装。

第六次大作业

设计思路:
输入:
用户输入的电路信息和命令
输出:
计算得到的各种参数值
程序设计思路
读取用户输入的电路信息和命令
解析输入,并将提取的信息存储在对应的数据结构中
根据输入的命令和电路信息进行计算
通过正则表达式提取命令中的具体信息
根据不同的命令和电路信息,进行相应的计算
将计算得到的结果存储在对应的数据结构中
对计算得到的结果进行排序和输出
对各种参数值进行排序
输出计算得到的各种参数值
数据结构设计
使用类存储电路中的元件信息
F 类,存储类型为 int 和 char 的元件信息
L 类,存储类型为 double 和 char 的元件信息
Bai、Ri、Diao、A 类,存储类型为 double 的元件信息
Kai 类,存储类型为 String 的元件信息
Bing 类,存储类型为 char、String 和 double 的元件信息
使用 ArrayList 存储不同类型的元件信息
ArrayList 存储 F 类元件信息
ArrayList 存储 L 类元件信息
ArrayList 存储 Bai 类元件信息
ArrayList 存储 Ri 类元件信息
ArrayList 存储 Diao 类元件信息
ArrayList 存储 A 类元件信息
ArrayList 存储 Bing 类元件信息
ArrayList 存储 Kai 类元件信息

踩坑心得:在59分苦苦卡了许久,试了许多遍才发现是double型运算时出现整型导致数据丢失,使得最后数据的四舍五入出了问题。
输入:
输出:
我源代码的输出的白炽灯为@B4:116,后改正。

改进建议:逻辑思维固然重要,语法规则的细枝末节同样不容小觑。

3.总结

在最近的Java大作业中,我学习了动态数组和继承这两个核心概念。动态数组,即ArrayList,让我领略到了Java在数据结构处理上的灵活性和强大性。通过ArrayList,我能够动态地增加或减少元素,无需预先设定数组的大小,这大大提高了代码的复用性和可读性。
在继承的学习中,我理解了子类与父类之间的关系,以及如何通过继承实现代码的复用和扩展。继承让我认识到面向对象编程的精髓在于抽象和复用,这为我后续的软件开发打下了坚实的基础。
然而,我也意识到自己在接口和类型转换这两个方面还有待深入。接口作为Java中实现多重继承的一种机制,其重要性不言而喻。我将进一步研究接口的定义和实现,以及如何通过接口实现不同类之间的通信和协作。
此外,类型转换也是Java编程中一个重要且复杂的概念。我将加强对基本数据类型与包装类之间转换的理解,以及学习如何正确处理向上转型和向下转型,以避免出现ClassCastException等异常。
通过这几次大作业,我更加坚定了学好Java的决心,并期待在未来的学习中不断提升自己的编程能力。
对于作业方面,虽然不太可能,但我依然希望示例的类型能更多一些,能让我更容易明白自己代码的错误与缺陷。

标签:总结,存储,题目,ArrayList,PTA,信息,数组,字符串,匹配
From: https://www.cnblogs.com/cao237fj693cao/p/18227548

相关文章

  • Ubuntu server 24 (Linux) IPtables 双网卡 共享上网NAT 安装配置DHCP
    一 开启路由转发功能sudovim/etc/sysctl.confnet.ipv4.ip_forward=1sudosysctl-p二 安装DHCP#更新软件包列表:sudoaptupdate#安装DHCP服务器sudoaptinstallisc-dhcp-server#修改监听网卡,根据实际修改sudovi/etc/default/isc-dhcp-serverINTERFACESv4=......
  • 持续总结中!2024年面试必问 20 道 Kafka面试题(三)
    上一篇地址:持续总结中!2024年面试必问20道Kafka面试题(二)-CSDN博客五、Kafka的ISR(In-SyncReplica)是什么?Kafka的ISR(In-SyncReplicas)是Kafka中用于维护数据一致性和高可用性的关键概念之一。ISR列表包含了一个领导者副本(Leader)和与之保持完全同步的追随者副本(Follower......
  • C 语言 switch 语句的要点与注意事项总结
    C语言的switch语句用于根据表达式的值进行多路分支选择。以下是switch语句的要点与注意事项:要点:基本语法:1switch(expression){2caseconstant1://代码块13break;4caseconstant2://代码块25break;6.........
  • 【Python】成功解决TypeError: ‘method’ object is not subscriptable
    【Python】成功解决TypeError:‘method’objectisnotsubscriptable 下滑即可查看博客内容......
  • PTA-- 《面向对象程序设计》作业6--集合与容器
    目录6-1tjrac-Java集合类之List的ArrayList之增删改查 6-2tjrac-Java集合类之Map的HashMap之常用方法的使用  6-3tjrac-Java集合类之Set的HashSet之常用方法的使用6-1tjrac-Java集合类之List的ArrayList之增删改查仔细阅读下面编辑区内给出的代码框架及......
  • 常用设计模式总结,附完整图解
    UML类图类图定义规则属性和方法前加上(+、-、#、留空)分别代表:公开(public)、私有(private)、保护(protected)、缺省(default)方法括号内为参数类型,冒号后为返回值类型下划线表示静态(static),斜体表示抽象(abstract) 类图关系表示法其中关联、聚合、组合,比较容易混淆,它们的区别:关......
  • PTA题目集4~6的总结性Blog
    一:前言:1.知识点总结:①:java面向对象类和对象的基本用法②:关联类,依赖类和组合等类间关系③:正则表达式的运用④:Comparator接口及比较器基本使用⑤:ArrayList的基本使用⑥:Collections.sort方法使用2.题量:较少,每次题目集不超过3题3.难度:由于题量少,所以每次题目集难度较大,......
  • Java题目集4~6的总结
    前言面向对象编程课程的“答题判题程序-4”作业是一个综合性的练习,旨在加深学生对面向对象编程思想的理解,并实际应用于解决复杂问题。本作业要求学生设计并实现一个答题程序,模拟小型测试的全过程,包括题目信息、试卷信息、答题信息、学生信息的输入,以及答题结果的判断和输出。家......
  • 20240602比赛总结
    T1等差子序列https://gxyzoj.com/d/hzoj/p/3638主要在枚举的方法上,要选小常数较小的方法30pts:枚举前两个数,然后算出第三个数的值,看位置是否满足条件100pts:上面的方法中,不是每组数都可以满足条件,可能会出现大于n或小于1的情况,但是却无法避免对它的的枚举,所以常数较大可以......
  • 南昌航空大学大一下学期java题目集4-6总结性Blog-苏礼顺23201608
    一、前言——总结三次题目集的知识点、题量、难度等情况 关于知识点  这次的三次题目集更加进一步体现了面向对象程序设计的思想方法。主要是之前的三次题目集就只是利用了面向对象三大基础特性中的封装特性,而这三次的题目集增加了继承与多态,这正是面向对象设计的精髓所......