• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
byk24269
博客园    首页    新随笔    联系   管理    订阅  订阅

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的时候,我们便要接受从面向过程到面向对象的转变,这也让我们这些编程菜狗十分难绷。

一、前言:

  1. 第一次大作业

           第一次的大作业可以说是入门,让我们对面向对象的语言有了一个基础的认识,题目也是偏向基础的,让我们对面向对象有一个基本的认识。

                              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有了初步的基础。

  1. 第二次大作业

         第二次大作业我们就体会到了java对我们这些菜狗的恶意,总分数不变,但题数只有四道题,仔细一看,才发现前两道题是菜单计价程序,两道题总和达到了70分,这也算是让我们第一次           对类这个概念有了初步的认识。

                             7-1 菜单计价程序-1

                             7-2 菜单计价程序-2

                            7-3  jmu-java-日期类的基本使用-----localdatetime的使用

                            7-4 小明走格子-----java的快读以及算法的优化

           这次大作业时间紧,任务重,而且还是第一次正经的用类的概念写程序,应该是还没有理解,导致最终没有达到及格的要求。

  1. 第三次大作业

          第三次大作业像是前两次的融合,保留了一部分让我崩溃的菜单计价程序的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实例。

  1. 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要烧掉啦。。

 

posted @ 2023-04-01 21:37  古月忄台羊羽  阅读(201)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3