首页 > 其他分享 >BLOG总结

BLOG总结

时间:2023-11-19 23:55:38浏览次数:31  
标签:总结 容器 过河 题目 ArrayList BLOG 设计 方法

前言:

        在过去的三个星期里,我接触了许多新的知识和技能。从编程思想到软件包的使用,涉及了诸如set、map、stream、DoubleLinkedList、lambda表达式、正则表达式等内容,这些是我之前接触较少但非常精密的知识。同时,我还学习了银行类的设计、农夫过河实验以及期中考试(主要考察继承、多态和容器类的使用),并对之前学到的技能进行了复习。

        在这几周的学习中,我发现迭代和自学是学习过程中的主题。迭代体现在每次PTA实验中,从点线的设计到三角形、凹四边形,甚至是农夫过河实验中的船类、分类、兔子类和萝卜类等方面。通过逐步优化设计,我意识到之前设计中的不足之处,并进行了修正。然而,我也意识到粗糙的设计可能会导致重复,甚至在编码过程中出现一些意想不到的问题。因此,在未来的实验中,我将更加注重细分和优化设计。这些都是迭代思想带来的收获。

        另一方面,自学体现在课堂上的变化。逐渐减少的课时使得我们不得不更多地依靠自己,从数据结构类到优化代码的方法,我都需要自主学习。在上一次的实验报告中,我更多地体现了思考的过程,而在编码过程中,我也意识到了一些问题。这让我明白了迭代过程中的价值,也更加坚定了我对于细致思考和自学的重视。

 

题目总结:

期中考试题目一

第一题要求设计表示平面直角坐标系上的点(Point)和线(Line)的类。考察基础的语法,要求输出结果保留两位小数,并使用`String.format("%.2f", data)`。相关属性要用private,除了行为之外不使用public以保证代码耦合度低。

期中考试第二题
第二题是对第一题的迭代,要求增加一个类Plane,并定义一个共同父类Element(抽象类),其中包含display()抽象方法。子类需完善继承来的方法,通过Main里的子类对象赋值给父类对象进行调用。

期中考试第三题
第三题在第二题基础上继续迭代,要求增加一个GeometryObject容器类,其属性为ArrayList类型的对象,并要求添加add()和remove(int index)方法。要求在main里根据要求判定添加、删除或退出,并注意范围判定和泛型内容。

链表设计
设计单向链表和双向链表,使用接口和泛型实现,通过Java类存储数据模拟结构体。在实现过程中,单向链表的删除需要指向被删除节点的前一个节点,而双向链表可以直接删除等等。

图形类设计
设计一个程序,通过用户输入选项和数据进行与四边形有关的计算。判断是否是四边形、平行四边形、菱形、矩形、正方形,判断是凹四边形还是凸四边形,输出交点数量和五个点坐标,并判定第一个点是否在后四个点所构成的凸四边形或三角形内部。

农夫过河
涉及着农夫过河的大实验,需要对对象进行过河、死亡、吃等操作,并考虑如何优化代码,引入多继承的思路,并分析多个类的关系。

ATM机类设计
设计一个ATM机类,实现对每个类有清晰明确的认知,尽可能降低耦合度,并对check、帐户匹配等功能进行判定。

 

第三题要求在第二题的基础上进行迭代,添加一个GeometryObject容器类。该容器类具有一个属性,类型为ArrayList(如果不了解泛型,可以不使用)。容器类还要实现add()方法和remove(int index)方法。add()方法用于向容器中添加对象,remove(int index)方法用于删除容器中指定位置的对象(注意,ArrayList的索引从0开始)。这里使用了Java自带的ArrayList来实现容器功能。需要注意的是,添加到容器中的对象的类型应该是Element类的子类,与第二题中的Point、Line、Plane类保持一致。除此之外,对于main方法也进行了一些改良。根据要求判断是添加、删除还是退出操作,可以使用switch语句来实现。在编写代码时,需要注意审题,题目中已经给出了switch语句的框架。GeometryObject容器类中使用了一点泛型的内容,但实际上并没有充分利用它。我们只需要将子类对象添加到ArrayList中,或者从ArrayList中删除对象。在输出时也没有那么复杂,可以直接使用foreach循环遍历ArrayList来输出对象。在考试时可能会忘记这种操作方式,所以在容器类中可以添加一个方法来返回容器中的值,然后在main方法中直接使用foreach循环来遍历ArrayList并调用display()方法。

农夫过河的大实验已经在前言中进行了一定的讲解,主要思路不再赘述。我将重点讲一下不足之处以及待优化的点。为了分析这些问题,首先需要对整个实验中使用的方法进行总结。整个实验可以分为三个大块:一是每个对象都具有的过河和死亡这些共同的方法,二是部分对象具有的吃的行为,以及农夫位置所带来的保护机制。目前的实现方式是一个大的农夫类,下面有很多子类,但并没有建立食谱,而是直接在主方法中进行硬性判断。毫无疑问,这种方式是不科学的,我并不打算详细讨论其弊端,而是提出优化的思路。我考虑到了多继承的概念,与Python和C++支持多继承不同,Java可能需要多个接口或者内部类。经过仔细思考,我将这个问题分成了两块。以狼为例,狼的父类从"Father"变成"肉食类",肉食类中包含了一些关于死亡、过河和吃的方法。以菜为例,它只需要死亡和过河的方法。我将对象分为"肉食类"和"菜食类"这两个大的父类下面的子类,然后再加一个父类,包含死亡和过河的方法以及相应的属性,这样可以有效地解决问题。考虑到我们当前的代码并没有使用接口,这种方式也比使用接口更方便进行修改。

设计ATM机类时,需要对每个业务操作进行逐行输入,直到输入字符“#”为止。代码示例如下:


while (!s.equals("#")) {
String[] information = s.split("\\s+");
Information.Wrongformat(information);
s=in.nextLine();
}

对于这道ATM机设计题目,难度较大,要求对每个类有清晰明确的认知,尽可能降低耦合度,实现功能区分。在对数据进行判定时,主要难点在于如何检查账户,匹配用户名和账户名。在编写代码时,需要对整个题目有整体概念,明确构成整个题目的关键点和类,梳理每个类拥有的属性,理解每个属性的意义和作用,以及哪些功能由哪些类实现。

在对结果进行输出时,需要分开讨论两种输入情况。设计`Account`类时,需要注意类与`Bank`的关系,合理调用并区分类的功能。考虑清楚一对多和多对一的关系,以及在输入数据时的存储分配和搜索过程。对不符合题目要求的数据进行检查,输出相应错误信息并结束程序,进行下一次输入。对于修改账户余额,也应该有一个独立的类来实现该功能。

 

改进建议:

在设计时,应该避免盲目行动,而是要先考虑适用于特定题目的算法类型。对于复杂的问题,有利于先绘制类图,比如对于ATM机类的设计,需要理解各个类中方法的作用,如"changemoney"和"present"功能类。此外,通过农夫过河的实验,我意识到了继承与组合的区别以及程序设计中代码复用的重要性。合理的继承和复用对代码优化至关重要。另外,在Java语言中,多态的基本概念、使用方法、上转型和下转型,以及对刚接触的知识如set、map、stream、DoubleLinkedList、lambda表达式和正则表达式等需要加以巩固。

 

总结:

总结来说,经过近几周的学习,我开始逐渐理解面向对象的真正含义,并学会了有效率地优化算法和处理耦合等问题。这是一个漫长的过程,很多习惯都是日积月累形成的,推导、重复、再推导、再重复。以我现在的水平,要完成更高水准的任务仍然很困难,这也对自己平时的学习提出了更高的要求。随着课程的深入,题目肯定会变得越来越难,因此如何保持进度,学好这门学科成为当前的重大任务。踏实学习,展望未来,不只是空洞的口号,加油,好好学习。

在这次的学习中,已经过了一半的课程时间,同样收获颇丰。在前言中提到,这几周的学习贯穿的关键词是迭代和自学。一系列的实际题目验证了这一点。Java中存在许多便利的类和有用的功能,比如正则表达式、lambda表达式等。不能再用C语言的思维方式学习Java。这几周的学习不会因为一篇blog而停止,而我也意识到这篇blog还存在不足之处。在上一次blog中提到踏实学习、展望未来,在这次中同样如此。如果有任何地方存在假大空或者做得不足的地方,还请同学们指出。我的联系方式是QQ:1102981285。这次的blog中有一些题目没有源码,其他的我都贴了,希望下一次能够做得更好。结束。

标签:总结,容器,过河,题目,ArrayList,BLOG,设计,方法
From: https://www.cnblogs.com/AllenGoCraze/p/17842998.html

相关文章

  • BLOG-2
    一、前言  这次是对PTA题目集4、5、6以及期中考试的总结性Blog。第4、5、6次PTA的主要内容就是对于菜单系列的题目的迭代。一次比一次复杂了。第4次题目集主要是菜单2和菜单3。当时写起来觉得很难,但是后面写了,感觉跟后面的相比之下还是容易一点。然后第5、6次题目集都是一次只......
  • BLOG-2
    一、前言1.知识点运用:子类父类的继承关系,以及各种类之间的依赖、关联、聚合和组合等关系。2.题量:菜单4,菜单5以及期中考试的三道题目。3.难度:菜单4和菜单5较为困难,跟菜单3相比,菜单4增加了许多错误情况,而菜单5则是在特色菜和订多桌菜方面进行了迭代。二、设计与分析7-1菜单计......
  • BLOG-2
    期中考试的题目相对比较简单但是具有典型意义,而菜单系列的题目难度逐渐增加,总体来说需要认真对待。7-1菜单计价程序-3分数40作者 蔡轲单位 南昌航空大学设计点菜计价程序,根据输入的信息,计算并输出总价格。输入内容按先后顺序包括两部分:菜单、订单,最后......
  • 2023-2024-1 20231427 《计算机基础与程序设计》第八周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#JXJC)这个作业要求在哪里<作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08)|作业正文|...https://www.cnblogs.com/wszdhnsh/p/17842926.html |......
  • 2023.11.19 NOIP 总结
    考试复盘进场读了下题,T1很简单,并且后面三道题都挺可做的。因为可以任意交换,直接令当前串字典序最小,其它串字典序最大,然后比较一下就完事了。因为字符集大小只有\(26\),直接开桶模拟就可以了。发现不是很好写,想了一下其实只需要判断一下当前串字典序最小的字母的字典序是否大于其......
  • 2023-2024-1 20231305 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231305《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2022-2023-1计算机基础与程序设计第一周作业)这个作业的目标<写上具体方面>......
  • 2023-2024-1 20231407陈原 《计算机基础与程序设计》第八周学习总结
    这个作业属于哪里计算机基础与程序设计作业要求是什么https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08作业目的是什么功能设计与面向对象设计面向对象设计过程面向对象语言三要素汇编、编译、解释、执行作业正文  https://www.cnblogs.com/CCCY12......
  • 2023-2024-1 20231415 《计算机基础与程序设计》第八周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这个作业要求是什么https://www.cnblogs.com/rocedu/p/9577842.html#WEEK01作业目标自学教材《计算机科学概论》第9章,《C语言程序设计》第7章并完成云班课测试作业正文https://i.cnbl......
  • 2023-2024-1 20231406 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231406《计算机基础与程序设计》第八周学习总结作业信息这个作业属于哪个课程([2023-2024-1-计算机基础与程序设计](https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP)这个作业要求在哪里(2023-2024-1计算机基础与程序设计第八周作业这个作业......
  • blog2
    一、题目:7-1菜单计价程序-4本体大部分内容与菜单计价程序-3相同,增加的部分用加粗文字进行了标注。设计点菜计价程序,根据输入的信息,计算并输出总价格。输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。菜单由一条或多条菜品记录组成,每条记录一行每条菜品记录包含:菜......