BLOG作业1
PTA 3次大作业分析
写在前面的话:Java是一种通用的,基于类的,面向对象的编程语言。它是用于应用程序开发的计算平台。Java遵循WORA(Write Once, Run Anywhere。一次写入,到处运行)的原则,并且与平台无关。它也简单易学。Java的应用场景非常广泛,其中包括但不限于:大数据技术:Java是大数据的视角,许多开发人员正在将职业转向大数据技术。
分布式应用:Java提供了实现分布式应用程序的选项。
相比C语言来说:
C语言是一种面向过程的编程语言,而Java是一种面向对象的编程语言。在C语言中,程序员需要自己管理内存和变量,而在Java中,Java虚拟机会自动管理内存并提供垃圾回收机制。
C语言是一种编译型语言,而Java是一种混合型语言。在C语言中,程序员需要将代码编译成机器语言才能运行,而在Java中,程序员需要先将代码编译成字节码,然后在Java虚拟机上运行。
C语言的应用场景相对比较集中,主要用于操作系统和嵌入式开发等底层领域。而Java的应用场景更加广泛,可以应用于Web开发、移动开发、大数据开发等领域。
Java语言具有一些C语言所没有的特点,例如垃圾回收机制、可移植性、多线程、动态性等。同时,Java也摒弃了C++中一些难以理解的概念,例如多继承和指针等。
Java的类库比C语言的标准库更加丰富,因此Java的编程难度相对较低。Java的类库可以帮助程序员更加方便地完成常见的编程任务,例如网络编程、数据库访问等。
总的来说,C语言和Java在很多方面有所不同,它们各自有自己的优缺点和适用场景。对于我们来说,我们可以把用C语言解决起来较为复杂的题目转为用java来写,从而使程序更为简单。
在大一下学期,我们第一次接触到了java这个让我们又爱又恨的语言,也是第一次从C语言面向过程的语言认识到了java这种面向对象的语言,而这第一关,便是要理解什么叫做面向对象,类又是什么,属性和方法又是什么。在初识java的时候,我们便要接受从面向过程到面向对象的转变,这也让我们这些编程菜狗十分难绷。
一、前言:
- 第一次大作业
第一次的大作业可以说是入门,让我们对面向对象的语言有了一个基础的认识,题目也是偏向基础的,让我们对面向对象有一个基本的认识。
7-1 身体质量指数(BMI)测算-----主要是数据的输入并处理,同时根据不同的区间输出不同的结果
7-2 长度质量计量单位换算-----数据的输入并处理
7-3 奇数求和-----for循环遍历奇数并求和
7-4 房产税费计算2022-----了解java的数据输出规则
7-5 游戏角色选择-----初识java关于游戏的应用
7-6 学号识别-----从字符串中利用substring()函数提取特定的位数并识别
7-7 判断三角形类型-----根据特殊三角形的定义对一般三角形区分
7-8 巴比伦法求平方根近似值-----利用Math库对数据进行处理
7-9 二进制数值提取-----对字符串的识别
这次大作业在摸爬滚打中,边做边学,了解了一些java特有的算法,算是对Java有了初步的基础。
- 第二次大作业
第二次大作业我们就体会到了java对我们这些菜狗的恶意,总分数不变,但题数只有四道题,仔细一看,才发现前两道题是菜单计价程序,两道题总和达到了70分,这也算是让我们第一次 对类这个概念有了初步的认识。
7-1 菜单计价程序-1
7-2 菜单计价程序-2
7-3 jmu-java-日期类的基本使用-----localdatetime的使用
7-4 小明走格子-----java的快读以及算法的优化
这次大作业时间紧,任务重,而且还是第一次正经的用类的概念写程序,应该是还没有理解,导致最终没有达到及格的要求。
- 第三次大作业
第三次大作业像是前两次的融合,保留了一部分让我崩溃的菜单计价程序的plus升级版,让我对自己的实力有了清晰的认识,因此,这次作业还是没能全部完成。
7-1 菜单计价程序-3
7-2 有重复的数据
7-3 去掉重复的数据
7-4 单词统计与排序-----排序算法的使用
7-5 面向对象编程(封装性)-----java的封装性
7-6 GPS测绘中度分秒转换-----特殊的输出格式
7-7 判断两个日期的先后,计算间隔天数、周数-----localdate以及time库的使用
二、设计与分析
1. 菜单计价程序-1
题目: 某饭店提供4种菜,每种菜品的基础价格如下:
西红柿炒蛋 15
清炒土豆丝 12
麻婆豆腐 12
油淋生菜 9
设计点菜计价程序,根据输入的订单,计算并输出总价格。
订单由一条或多条点菜记录组成,每条记录一行,最后以"end"结束
每条点菜记录包含:菜名、份额两个信息。
份额可选项包括:1、2、3,分别代表小、中、大份)
不同份额菜价的计算方法:
小份菜的价格=菜品的基础价格。
中份菜的价格=菜品的基础价格*1.5。
小份菜的价格=菜品的基础价格*2。
如果计算出现小数,按四舍五入的规则进行处理。
分析:
这是第一次使用类的概念来写java程序,看到题的第一眼是头大。第一次见这么长的题,而且,这只是我们做java题的第二个星期。但是仔细分析题目,利用面向对象的语言 来理解,就没有那么复杂了。
程序设计如下:
(1)引入Java.util.Scanner类,用于从控制台读取输入。
(2)定义名为Main的公共类,该类包含一个名为main的公共静态方法。在该方法中,通过Scanner读取输入,然后使用split()方法将输入的每一行按空格拆分成字符串数组。然后将第2个字符串转换为整数,以获取菜品的份额信息。接下来,调用Order类的addARecord()方法将该菜品和份额添加到Order类的records数组中。
(3)定义Dish类,表示每种菜品的名称和单价。该类包含一个构造函数,用于初始化菜品名称和单价,以及一个名为getPrice()的方法,该方法接受一个份额参数并返回菜品的价格。
(4)定义Record类,表示订单中每个菜品的记录。该类包含一个菜品实例和一个份额变量,并具有一个构造函数和一个名为getPrice()的方法,该方法调用Dish类的getPrice()方法计算单价,然后返回本条记录的价格。
(5)定义Order类,表示一个完整的订单。该类包含一个Record数组变量,表示订单上的每个菜品记录。它具有一个构造函数和名为addARecord()的方法,用于向订单中添加菜品记录。该类还具有一个名为getTotalPrice()的方法,用于计算订单的总价。
(6)定义Menu类,表示所有可供选择的菜品。该类具有一个Dish数组变量,表示所有可供选择的菜品。它还具有一个构造函数和名为searchDish()的方法,用于在Dish数组中搜索具有给定名称的菜品。如果找到匹配的菜品,则返回该菜品的实例。否则返回null。
该程序的主要流程是:读取用户输入,然后使用addARecord()方法将菜品记录添加到订单中。最后,使用getTotalPrice()方法计算订单的总价并打印出来。
改进:在addARecord()方法中每次调用时都会创建一个新的Menu实例。这样会导致每次添加菜品记录时都要重新扫描所有菜品,效率很低。应该将Menu实例化的代码移到Order类的构造函数中,以便每个Order实例只需要创建一个Menu实例。
- 2. 菜单计价程序-2
题目:设计点菜计价程序,根据输入的信息,计算并输出总价格。
输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。
菜单由一条或多条菜品记录组成,每条记录一行
每条菜品记录包含:菜名、基础价格 两个信息。
订单分:点菜记录和删除信息。每一类信息都可包含一条或多条记录,每条记录一行。
点菜记录包含:序号、菜名、份额、份数。
份额可选项包括:1、2、3,分别代表小、中、大份。
删除记录格式:序号 delete
标识删除对应序号的那条点菜记录。
不同份额菜价的计算方法:
小份菜的价格=菜品的基础价格。
中份菜的价格=菜品的基础价格1.5。
小份菜的价格=菜品的基础价格2。
如果计算出现小数,按四舍五入的规则进行处理。
程序设计如下:
程序通过读取控制台输入的字符串,根据输入的命令执行不同的操作。
程序包含以下类:
Dish类:代表一个菜品,包含菜品名称和单价属性,还有一个计算菜品价格的方法。
Record类:代表订单上的一道菜品,包含订单编号、菜品、份额和数量属性,还有一个计算该菜品价格的方法。
Order类:代表一个订单,包含多个Record对象,提供了添加、删除、查看订单和计算总价等操作。
Menu类:代表菜单,包含多个Dish对象,提供了添加、查找菜品的操作。
程序的主类是Main类,它包含了一个Menu对象和一个Order对象,通过while循环不断读取控制台输入的字符串,根据输入的命令执行不同的操作。如果输入的是一个菜品信息,那么将创建一个Dish对象并添加到Menu对象中;如果输入的是一个订单信息,那么将创建一个Record对象并添加到Order对象中;如果输入的是一个删除订单的命令,则将根据订单编号删除对应的Record对象;最后,程序会输出所有订单的总价。
踩坑心得:没有对输入的字符串做错误处理、对字符串的比较使用了equals方法而不是equalsIgnoreCase方法、在添加菜品时使用了一个不必要的Menu对象等等。因此,如果需要使用该程序,需要进一步修改和优化。
三、主要困难:
1.对类的概念理解不够透彻,在做题之前不能做到详尽的分析,分析类与方法。
2.做题时遇到许多从未见过的错误,比如非零返回,时间过长等问题,后来在CSDN上反复查询,以及与同学交流方解决问题。
3.题目许多部分较为复杂,应该多学习CSDN上大佬的算法来优化自己的程序。
四、总结
这三次的大作业完成状况不是很乐观,主要原因还是对java的理解不够透彻,还不能完全理解透面向对象的概念,导致题目不能及时完成,还有就是对时间的分配不到位,浪费了太多课余时间在不必要的地方,没有下功夫去钻研,长进自己。这三次大作业主体来看,难度没有想象的那么高(除了某些题),真正阻挡我的是看到题目就退却的那颗心,看到题目发憷,不敢去深想,所以,以后要敢于去想,敢于尝试u,程序设计就是在不断的尝试中才能成功,希望自己能在以后的作业中改变自己,争取进步。
五、建议
希望老师可以整点简单的题目,CPU要烧掉啦。。