首页 > 其他分享 >第一次blog

第一次blog

时间:2024-04-21 15:46:14浏览次数:30  
标签:匹配 正则表达式 第一次 blog 哈希 字符串 Java 方法

前言:
本学期我开始了Java的学习之旅,从类的学习,输入与输出,到集合与哈希表。下面是一个从类的学习开始的Java学习总结:

类与对象:

类是Java中的基本构建模块,它定义了对象的属性和行为。
对象是类的实例,具体化了类的属性和行为。
类的结构:

类由类名、属性(成员变量)和方法(成员函数)组成。
成员变量用于描述对象的状态,成员方法用于描述对象的行为。
类的定义:

使用关键字class来定义类,语法结构为:class ClassName { }。
类名应该符合命名规范,一般采用驼峰命名法。
成员变量:

成员变量用于描述对象的属性,可以是基本数据类型或引用数据类型。
成员变量可以设置访问修饰符,如public、private、protected和默认(无修饰符)。
成员方法:

成员方法用于描述对象的行为,可以包括普通方法、构造方法和静态方法。
构造方法名与类名相同,用于对象的初始化。
静态方法使用关键字static修饰,可以直接通过类名调用,不需要创建对象。
封装、继承和多态:

封装(Encapsulation):将类的实现细节隐藏起来,只暴露必要的接口给外部。
继承(Inheritance):子类可以继承父类的属性和方法,并且可以在此基础上进行扩展。
多态(Polymorphism):同一方法在不同对象上的行为可能不同,通过方法的重写和重载实现多态性。
在后续的作业集中还自行学习了哈希表的运用,了解到了重写equals()方法与hashCode()方法来确保不会出现哈希冲突,键值对重复的情况。
也学会了正则表达式的运用。
访问修饰符:

Java提供了public、private、protected和默认(无修饰符)四种访问修饰符来控制类的成员的访问权限。
设计与分析:

针对题目集的第一题,我们需要分析题目的要求,设计相应的代码并解释设计思路。该题主要涉及输入输出、正则表达式、集合类、字符串处理等多个方面,因此我们需要综合运用这些知识点来完成题目要求。

首先,我们需要编写一个Java程序,用于读取用户输入的字符串,并根据指定的正则表达式匹配并提取其中的信息。我们可以使用Scanner类来实现用户输入的读取,然后使用正则表达式来匹配提取所需信息。

注意使用():用于捕获匹配的内容。?:用于非贪婪匹配。

Matcher和Pattern类的使用:用于进行正则表达式的匹配和操作。
matcher.find()方法:用于在输入的字符串中查找与正则表达式匹配的文本。
matcher.group(int)方法:用于获取匹配到的文本中特定分组的内容。
字符串转换为整数:通过Integer.parseInt()方法将字符串转换为整数类型。

其次,我们需要将匹配提取到的信息存储起来,这里可以使用集合类来进行存储,例如HashMap或ArrayList等。我们可以将匹配到的信息存储在HashMap中,其中键值对的形式可以使得信息的存储和检索更加方便快捷。

lines = new ArrayList<>();用于储存所有输入行。

在使用正则表达式对其进行划分储存入相应集合以便分别进行处理
pattern1_N = new ArrayList<>();
pattern1_A = new ArrayList<>();
使用强循环对题目行集合进行处理

private LinkedHashMap<Integer, QuestionData> questionMap;使用LinkHashMap对所有题目的题号,内容,答案进行储存

最后,我们需要将存储的信息按照指定的格式进行输出,这里可以使用字符串处理的方法来进行格式化输出。我们可以将HashMap中存储的信息逐条取出,然后按照指定的格式拼接成字符串,并输出到控制台或写入文件中。
运用了方法:StringBuilder 提供了一系列方法来进行字符串的操作,如添加字符、插入字符、删除字符、替换字符等。
StringBuilder resultBuilder = new StringBuilder();
resultBuilder.append(isCorrect).append(" ");对其进行添加,它提供了一种高效的方式来构建字符串。
当字符串处理好,最终可以通过 toString 方法将 StringBuilder 对象转换为一个普通的 String 对象。从而进行输出

通过上述分析,我们可以设计出一个满足题目要求的Java程序,并解释了其设计思路和实现方法。

在后续两个作业集中思路是大概一致的但是多了学号,试卷,答卷的输入与输出,和删除题目的功能。

来分别获取学号,答卷的信息,要重新设计正则表达式来匹配对应的字符串输入。然后分别进行处理把数据存入哈希表。
哈希表,具有以下几个主要好处:

快速的查找操作:哈希表通过将关键字映射到数组的特定位置来实现快速的查找操作。通过哈希函数,可以将关键字映射到数组的索引,使得查找操作的时间复杂度接近 O(1),即使在包含大量数据的情况下也能够快速定位到目标数据。

高效的插入和删除操作:除了查找操作外,哈希表也支持高效的插入和删除操作。通过哈希函数确定元素在数组中的位置,插入和删除操作的时间复杂度也接近 O(1)。

适用于大数据量:由于哈希表具有快速的查找、插入和删除操作,因此在处理大量数据时非常高效。即使数据量很大,哈希表仍然能够保持较高的性能。

灵活性:哈希表可以存储各种类型的数据,无论是简单的整数、字符串,还是复杂的对象,都可以作为键或值存储在哈希表中。

解决冲突:在实现哈希表时,通常会采用解决冲突的方法,例如链地址法(Chaining)或开放地址法(Open Addressing)。这些方法可以有效地处理哈希碰撞(即不同关键字映射到同一个位置的情况),保证哈希表的性能和正确性。

采坑心得:

在提交过程中,我遇到了几个问题需要解决。首先是关于正则表达式的编写,需要确保正则表达式能够准确匹配到目标信息,这需要对正则表达式的语法和匹配规则有一定的了解和熟练掌握。其次是关于集合类的使用,需要注意对集合中元素的添加、删除和检索等操作,以及遍历集合并对其中的元素进行操作的方法。

另外,还需要注意异常处理和边界情况的处理,确保程序能够稳定运行并正确处理各种情况下的输入数据。在调试过程中,我发现了一些潜在的问题并及时进行了修复,这有助于提高程序的稳定性和健壮性。

总的来说,通过不断地排查和解决问题,我逐渐掌握了Java编程中的一些技巧和经验,并且对程序的编写和调试有了更深入的理解和认识。
1.哈希表重写方法问题:

问题描述:在使用哈希表时,没有正确重写对象的 equals() 和 hashCode() 方法吗,导致我读取时发现了多个重复数据
影响:导致哈希表无法正确判断两个对象是否相等,从而影响了查找操作的准确性。
数据支持:在未重写方法的情况下,相同的对象可能被哈希表认为是不同的,导致查找失败或者数据错误。
解决方法:确保在使用自定义对象作为键值时,正确重写 equals() 和 hashCode() 方法,以确保哈希表能够正常工作。
2.正则表达式未进行分组问题:

问题描述:在使用正则表达式时,没有进行分组匹配,而是直接使用拆分法获取数据。如:我按空格拆分,但是在其余部位可能包含空格,从而导致我的数据存入失败
影响:导致无法正确获取需要的数据,影响了程序的准确性和效率。
数据支持:通过对比使用正则表达式和拆分法的结果,可以看出正则表达式的匹配更为精准,数据获取更加准确。
解决方法:在使用正则表达式时,合理地进行分组匹配,以便获取需要的数据,并提高代码的可读性和可维护性。
3.使用方法:StringBuilder 时出现输出问题:

问题描述:resultBuilder.append(isCorrect).append(" ");循环构建字符串,导致字符串最后多出空格。
影响:导致无法正确输出案例。
解决方法: String result = resultBuilder.toString().trim();,trim() 方法返回一个新的字符串,其中删除了原始字符串开头和结尾的空白字符。

针对编码改进的建议,我会考虑以下几点来实现可持续改进:

代码可读性:

使用更具描述性的变量名和方法名,以便他人理解和维护代码。
添加必要的注释,解释代码的逻辑和功能,提高代码的可读性。
异常处理:

对可能抛出异常的代码进行适当的异常处理,避免程序意外中断。
性能优化:

使用合适的数据结构和算法,优化程序的性能和效率。
避免不必要的内存和时间消耗,尽量减少资源的浪费。

总结:

通过本阶段三次题目集的练习,我学到了很多关于Java编程的知识和技巧,包括正则表达式、集合类、字符串处理等方面的应用,对程序的设计和实现有了更深入的理解和认识。但同时也发现了一些需要进一步学习和研究的地方,比如对高级知识点和技巧的掌握还不够深入,需要继续努力学习和提高。

标签:匹配,正则表达式,第一次,blog,哈希,字符串,Java,方法
From: https://www.cnblogs.com/yushang257368419/p/18148947

相关文章

  • 第一次Blog总结-前三次答题判定程序
    目录前言设计与分析采坑心得改进建议总结关于java&面向对象因为这学期刚开始学习java,因此对于java的某些知识点或技巧掌握地不是太熟练,但是经过长达三周的折磨下,总算对java有了初步的总体认知。前言知识点覆盖:数组灵活运用,List和Map接口灵活运用,各种类的设计已经......
  • JAVA学习第一次Blog
    前段时间老师在PTA上发布了三次大作业,这几次大作业的难度都比较高,对我来说除了前面的题目,最后的大分数压轴题我每次都做不出来。这与上个学期学的C语言作业难度简直不是一个等级的,不过JAVA老师也在上课期间一直强调,“我们JAVA课程一定要做出改变,不能说怕学生挂科就把难度设置的很......
  • 第一次blog总
    一、前言:第一次pta作业:1.知识点:简单的类的设计,类和对象的使用,类的数组类型的基本应用,类间的关联等基础的类间关系设计,实现对类的封装等操作。2.题量:4道简单题,1道迭代的难题。3.难度:前4道题比较简单;最后一道第一次写难度较大。第二次pta作业:1.知识点:考察类实现Comparable......
  • 第一次Blog
    前言第一次题目集是对类的设计,类与对象的使用和类与数组关联类的考察。第二次题目集是类与对象之间的创建以及运用的考察。第三次题目集是对类的封装性以及Java自带时间包的运用的考察。总而言之,三次题目集的题目量并不算大,题目集的难度也是比较中等。设计与分析这是答题......
  • 第一次OOPBlog
    PTA也写过了三次作业了,虽然很遗憾都没有拿到满分,不过在练习的过程中也很直观的学到了一点:做题不能因为不会就轻易放弃,要学会钻研。借着这次机会,好好的和之前的自己“算个帐”。首先是第一次作业中:1.涉及到了对象的包装,即面向对象的程序的三大技术之一,如:设计一个风扇类:点击查......
  • PTA三次题目集总结性Blog
    (1)前言1.第一次题目集知识点主要涉及类的设计和实现、构造方法的使用、成员变量和访问器/修改器的定义、方法的重写(toString方法)、对象的创建和调用方法、控制台输入和输出的使用、浮点数的格式化输出等,题量比较适中,难度也比较适中,要求实现的功能较为基础,但需要一定的类设计和方......
  • OOP课程第一次博客
    目录1.前言2.设计与分析1.第一次pta作业2.第二次pta作业3.第三次pta作业3.踩坑心得4.改进建议5.总结1.前言前三次pta题目集的最后一题主要是实现一个模拟小型测试的答题判题程序,第二次题目集在第一次的基础上新增了一个答卷类,第三次题目集在第二次题目集上新增了一个学生类并且......
  • 关于发布题目集1~3的总结性Blog
    前言:这几次关于答题判题程序是通过从键盘中输入提取出对应的信息(比如说题目,试卷,答卷等等)然后再进行逐一判断。从中考查的知识点是正则表达式的运用,加上了split函数的运用,类的数组运用等等。主要的还是这三点。由于一直的迭代,导致最终它的题目要求越来越多,导致难度直线上升。也从8......
  • 题目集1~3的总结性Blog
    一、前言第一次题集知识点主要是掌握类和对象的使用创建,以及类与类之间的关系,还有正则表达式的运用,动态数组ArrayList类的使用,以及方法。这一次的题集难度不是很大,因为是第一次所以来说题量有点大。也是艰难完成了。第二次题集知识点与第一次的类似主要还是对正则表达式的使......
  • blog1
    1前言1.1知识点总结(1)在题目集1里分别有类与对象的使用(包括方法的定义(void方法,int类型返回等等)与属性的定义(例如整形,布尔型的定义等等),如何对类与对象进行引用(使用new创建一个新类,并进行有参构造或无参构造对类里的属性进行赋值))(2)类与类之间的引用,包括方法之间的互相调用(包括一个......