第一次至第三次PTAJava大作业分析
(1)前言:
三次题目集的知识点:
正则表达式(Regular Expression,简称Regex或RegExp)是一个强大的文本处理工具,用于匹配、查找和替换字符串。以下是正则表达式的主要知识点总结:
基本字符:
字面字符:表示自身的字符,如a、1、$等。
转义字符:使用\作为前缀,如\n表示换行。
字符类:
单字符:用[ ]表示,如[abc]匹配任意一个字符a、b或c。
范围:如[a-z]匹配任意小写字母。
排除:使用[^ ]表示,如[^0-9]匹配任意非数字字符。
预定义字符类:
\d:匹配数字,等价于[0-9]。
\D:匹配非数字。
\w:匹配单词字符,包括字母、数字、下划线。
\W:匹配非单词字符。
\s:匹配空白字符,如空格、制表符、换行符。
\S:匹配非空白字符。
数量词:
*:零次或多次。
+:一次或多次。
?:零次或一次。
{n}:恰好n次。
{n,}:至少n次。
{n,m}:至少n次,至多m次。
边界匹配:
^:匹配字符串开始。
$:匹配字符串结束。
\b:匹配单词边界。
\B:匹配非单词边界。
分组和引用:
使用( )进行分组。
\1, \2, ...:反向引用,引用之前的分组。
零宽断言:
(?=...):正向预查。
(?!...):负向预查。
(?<=...):正向后查。
(?<!...):负向后查。
替换和捕获:
String.replaceAll(regex, replacement):替换匹配的字符串。
Pattern和Matcher类用于更复杂的字符串操作和捕获组。
匹配模式:
Pattern.CASE_INSENSITIVE:忽略大小写。
Pattern.MULTILINE:多行模式。
Pattern.DOTALL:.匹配所有字符,包括换行符。
工具和应用:
使用在线正则表达式测试器进行调试。
编写单元测试以验证正则表达式的正确性。
在编程语言中使用正则表达式库进行字符串处理。
数据类型和变量:包括基本数据类型(例如int、double、boolean等)以及变量的声明、初始化和赋值。
运算符:包括算术运算符、比较运算符、逻辑运算符和位运算符等。
控制结构:包括条件语句(if-else)、循环结构(for、while、do-while)和switch-case等。
方法:包括方法的声明、定义、调用、参数传递和返回值。
类和对象:包括类的定义、构造方法、字段、方法和对象的创建和使用。
继承和多态:包括继承的基本概念、重写、重载和多态的应用。
数组:包括一维数组和多维数组的声明、初始化和遍历。
字符串操作:包括字符串的声明、连接、分割、查找等常见操作。
异常处理:包括try-catch-finally语句,以及常见异常类型的处理。
基本数据结构:例如列表、栈、队列、哈希表等数据结构的基本操作和应用。
题量:虽然题目数量不多,只有三道题,但是最后一题难度太大了,并且分数占比很大
难度:前两道题目难度不大,算简单,但是最后一题的连贯性很强并且很复杂
(2)设计与分析:
下面是我第一次PTA的最后一题
我
很抽象地把所有类放在了一个类里面,导致我最后分不清类,也未完成作业
在这次教训后,
我在后面的PTA作业中将类分块放,有了一些进步,也让我对Java这个语言的精髓有了更多的理解
以下是我第二次Java最后一个题目的代码
![](https://img202
4.cnblogs.com/blog/3433267/202404/3433267-20240421225954357-1257459199.png)
但是在第三次作业中,我看见题目实在很难读懂,所以没有花时间在最后一题的解决上
但是在写题目过程中,我学会了很多Java的知识点:首先是对集合概念更加理解,单列集合和双列集合,每个集合的操作,例如s.forEach(...): forEach 方法用于迭代集合 s 中的每个元素,并对每个元素执行指定的操作。
new Consumer() { ... }: 创建了一个匿名内部类实现了 Consumer 接口的实例。
public void accept(String st) { ... }: 实现了 Consumer 接口中的 accept 方法,该方法定义了对集合中每个元素的操作。
除此之外,对有无索引的概念更加清晰:有索引:
有索引通常指的是支持通过索引位置来访问元素的数据结构,比如数组和某些列表实现(如 ArrayList)。
对于有索引的数据结构,可以通过索引值来直接获取或修改特定位置的元素,这样可以在常量时间内(O(1) 时间复杂度)完成操作。
无索引:
无索引可能指的是某些数据结构或方法不支持通过索引来直接访问元素,而是通过其他方式进行操作的情况。
例如,链表(如 LinkedList)通常不支持随机访问,而是需要从头开始顺序遍历到目标位置才能访问到特定的元素。这样的操作通常需要线性时间(O(n) 时间复杂度)。
某些方法也可能不直接操作特定索引位置的元素,而是基于其他条件进行操作,例如过滤器或映射函数。
因此,区分有无索引的主要区别在于对元素的访问方式和操作效率。有索引的数据结构通常支持快速随机访问,而无索引的数据结构通常需要顺序访问或者基于其他条件来操作元素
System.out.println(st);: 在 accept 方法中定义了对集合中每个元素的操作,这里是打印每个元素。
除此之外,我还对正则表达式更加了解,在以前学习C语言的时候我常常觉得去匹配或者配对字符串的方法只有遍历然后做对比,但是通过使用正则表达式,我会觉得更加方便,例如匹配数字的开头或者字符串格式,这些工作通过使用正则表达式使得几十分钟的查询和配对的事情变得几秒钟就能解决,大大提高了代码的效率和程序员的精力,所以我认为发明更加便捷是方式在当今AI盛行的社会下程序员能打败AI的途径之一。
(3)采坑心得:虽然我没写出什么,但是我觉得要注重细节,比如输入方法的问题,我之前一直输入会读入下一行的空格,但是经过同学的帮助,我发现在输入和输出上面都有很大y异同
除此之外,对于正则表达式的运用过程中,我发现除了匹配之外,更多的是捕捉,因此我会在接下来的学习中多运用正则表达式的一些精髓,以下是我在正则表达式中的踩坑心得贪婪匹配:默认情况下,正则表达式会尽可能匹配更长的字符串。如果不想匹配最长的字符串,可以使用非贪婪量词(如*?、+?、{n,m}?)来匹配最短的字符串。
特殊字符转义:正则表达式中有些字符具有特殊含义,如.、*、+等,如果想要匹配它们的字面值,需要使用\进行转义。
字符类的范围:在字符类中使用范围时要注意ASCII编码顺序,例如[A-Za-z]可以匹配大小写字母,但[a-Z]是错误的范围。
边界匹配:使用边界匹配符号时,如^和$,要确保它们被正确放置,否则可能导致匹配失败或匹配到不符合预期的结果。
预定义字符类的使用:使用预定义字符类时要注意其适用范围,如\d匹配的是数字字符,不包括符号、小数点等。
分组的优先级:分组在正则表达式中具有优先级,如果想要改变默认的优先级,可以使用括号来明确分组的范围。
正向预查和负向预查:预查是零宽度匹配,匹配的是位置而不是字符本身,要注意预查的位置和匹配内容,避免出现匹配不符合预期的情况。
性能考虑:正则表达式的效率可能会受到输入字符串的长度和复杂度的影响,需要根据实际情况进行优化,避免出现性能问题。
(4)改进建议:在对一些高频率使用的方法编码时,我认为应该创建一个单独的类来实现,这样不仅能更高效地解决问题,还能将代码简化,大大提高了代码的可读性。理解基本概念:Java是一门面向对象的编程语言,首先需要理解面向对象编程的基本概念,如类、对象、继承、多态等。
掌握语法:学习Java需要熟悉其语法规则,包括变量、数据类型、运算符、流程控制语句等,这些是编写Java程序的基础。
编程实践:通过实际编程项目来巩固所学知识,可以从简单的程序开始,逐渐增加复杂度,这有助于加深对Java编程的理解和掌握。
阅读文档:Java有详细的官方文档和教程,可以通过阅读文档来了解Java的各种特性和API的使用方法,这对于解决问题和提高编程效率非常有帮助。
多练习调试:在编写代码时经常会遇到错误,要学会通过调试工具找出问题并进行修复,同时要注意编写清晰、简洁的代码以提高可读性和维护性。
(5)总结:
理解问题的本质:有时候做错题目是因为没有完全理解问题的要求。重温题目,确保理解每个要求和限制条件。
仔细阅读文档和资料:Java有很多文档和教程,重点是理解核心概念。深入阅读文档能够帮助更好地理解和应用Java的特性。
积极动手实践:练习是学习的关键。多写代码,多做练习题,通过实践来加深对Java知识的理解和应用。
查找和理解错误:当做错题目时,不要气馁,而是要耐心查找错误并理解其原因。错误信息、调试器和打印语句都是很有用的工具。
学会向他人请教:有时候别人的观点和解释能够帮助我们更好地理解问题。不要害羞,向老师、同学或者在线社区寻求帮助。
逐步提高难度:先从简单的题目开始,逐渐增加难度。这样可以建立起对基础知识的扎实理解,并且逐步提高解决问题的能力。
保持耐心和毅力:学习编程是一个持续的过程,不要急于求成。保持耐心,坚持不懈,相信自己的能力。
记录和总结:在做错题目后,记得记录下错误和正确的解法。这样可以形成一个学习笔记,帮助巩固知识点。
第一次至第三次PTAJava大作业分析的更多相关文章
- python第三次周末大作业
''' s18第三周周末⼤作业 模拟博客园系统: 1. 启动程序, 显⽰菜单列表 菜单: 1. 登录 2. 注册 3. ⽂章 4. ⽇记 5. 退出 2. ⽤户输入选项, ⽂章和⽇记必须在登录后才可以 ...
- JAVA pta 前三次大作业回顾与分析
一.前言:总结三次题目集的知识点.题量.难度等情况 今年初次接触java,通过这三次大作业的练习,我对java有了一定的认识,相比于其他编程语言来说,java更复杂,要求也更严谨,需要掌握的知识也更多 ...
- #006 C语言大作业学生管理系统第三天
还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...
- c++小学期大作业攻略(三)用户系统
Update at 2019/07/22 14:16 发现一个大坑,我们后期是打算用QSS统一堆样式进行美化的,于是我把之前对QLabel进行的setAlignment全部去掉了,打算统一丢进Qss里 ...
- CSAPP HITICS 大作业 hello's P2P by zsz
摘 要 摘要是论文内容的高度概括,应具有独立性和自含性,即不阅读论文的全文,就能获得必要的信息.摘要应包括本论文的目的.主要内容.方法.成果及其理论与实际意义.摘要中不宜使用公式.结构式.图表和非公知 ...
- OO前三次作业分析
一,第一次作业分析 度量分析: 第一次的oo作业按照常理来说是不应该有这么多的圈复杂度,但是由于第一次写的时候,完全不了解java的相关知识,按照c语言的方式来写,完全的根据指导书的逻辑,先写好了正确 ...
- OO第三次博客作业——规格
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
- < JAVA - 大作业(2)仿qq即时通讯软件 >
< JAVA - 大作业(2)仿qq即时通讯软件 > 背景 JAVA上机大作业:设计一个仿qq即时通讯软件 任务简要叙述:设计一款仿QQ的个人用户即时通讯软件,能够实现注册,登陆,与好友聊 ...
- 大二小学期C#资产管理大作业小记
说明 这个程序是我大二夏季学期(俗称小学期)用Visual Studio + C#写的<资产管理>大作业.这个项目非常简单,就是用C#写出一个UI界面,并连接数据库进行增删改查.这是我第一 ...
- <JAVA - 大作业(1)文本编辑器 >
<JAVA - 大作业(1)文本编辑器 > 背景 JAVA上机大作业:qq / 代码评价系统 第一次上机主题是练习JAVA自带的GUI图形化编程 目的:实现一个跟window10记事本界面 ...
随机推荐
- MySQL统计信息不准导致的性能问题
简介: 统计信息不准导致错误的执行计划,引发性能问题 表的统计信息错误导致优化器选择错误的执行计划. 一个客户的性能优化案例: 没有修改数据库实例的任何配置参数以及业务代码没有变更的情况下,一条 sq ...
- Spring Boot Admin 集成诊断利器 Arthas 实践
简介: Arthas 是 Alibaba 开源的 Java 诊断工具,具有实时查看系统的运行状况:查看函数调用参数.返回值和异常:在线热更新代码:秒解决类冲突问题:定位类加载路径:生成热点:通过网页诊 ...
- 阿里云 Serverless 助力企业全面拥抱云原生
简介:相信随着云计算的发展,Serverless 将成为云时代默认的计算范式,越来越多的企业客户将会采用这个技术. 作者:洛浩 Serverless 应用引擎的组件架构 最早的时候,大家设计软件一般 ...
- [PHP] Laravel 的 503 Service Unavailable 模板提示的来源
当我们看到 Laravel 的 503 样式的模板时,是启用维护模式的时候的提示(php artisan down). 开启访问运行 php artisan up. Refer:Laravel 503 ...
- WPF 使用 Win10 的 WinRT 自带 Windows.Media.Ocr 实现图片转文本
世界上有很多 OCR 识别技术,本文来和大家介绍如果在 WPF 里,在运行到 win10 的设备上,通过 Windows Runtime 自带的 Windows.Media.Ocr 实现在给定的图片里 ...
- OLAP系列之分析型数据库clickhouse集群扩缩容(四)
一.集群缩容 1.1 下线节点 步骤:1.对外停止服务2.转移数据3.修改剩余节点配置4.通知客户端修改节点列表 # 修改90,91服务器配置文件 vim /etc/clickhouse-server ...
- C# - 能否让 SortedSet.RemoveWhere 内传入的委托异步执行
TL;DR; 若想充分利用 RemoveWhere 带来的性能优势,建议传入判断是否删除元素的委托内采取同步操作.若一定要在该委托内使用异步操作,可以采用本文中绕行的方法,但摈弃了 RemoveWhe ...
- CPU是什么?
在程序是怎样跑起来的这本书中我们首先被询问的一个问题是"程序是什么?它是有什么组成的?而CPU又与程序有什么关系呢?",若我们能知道前两个,其实更容易将你带入讨论"CPU ...
- sendmail发送慢的问题
1.使用python的脚本,发送邮件.代码如下: 点击查看代码 [root@ZabbixServerMasterNode ~]# cd /etc/zabbix/alertscripts/ [root@ ...
- 使用.NET源生成器(SG)实现一个自动注入的生成器
DI依赖注入对我们后端程序员来说肯定是基础中的基础了,我们经常会使用下面的代码注入相关的service services.AddScoped<Biwen.AutoClassGen.TestCon ...