第二次博客作业

前言:

第四次大作业:

本次大作业只有一题的题目量,本次题目是在第三次大作业的基础上进行了一些迭代的功能,虽然题目比较少,但是增加的功能需要花费大量的时间进行学习和设计。本次大作业增加了对时间类的考察,比如给定一个特定格式的字符串怎么将其转化位时间类,两个时间类之间怎么计算两者相差的时间,天数,年份,月份。以及一个时间是否在另一个时间范围之内。本次大作业增加了许多的限制功能,按照之前的写法,类似于雪上加霜。因此引入了正则表达式这个知识点。它可以对每个字符串或者数字进行以一 一比较。因为本次考察了当重复的桌号在相同的时间内需要合并为一桌,这考察了对泛型的一些基本知识点。

第五次大作业:

本次大作业任然只有一题,它是和作业四类似的在第三次作业进行的迭代。两者属于不同分支的迭代,在进行过第四次大作业后的学习,这次写起来会比前面几次相比相对轻松一点。它增加了特色菜,对特色菜进行了一系列的操作,因此需要专门有个特色菜的记录,方便以后的操作,这是和前面不同的。本题也是大量运用到了正则表达式的知识点,判断几位数的范围。也运用到了Localdata的时间类进行操作。本次大作业让我觉得比较头疼的是根据名字将桌号记录进行合并,刚开始我一直在想如何运用泛型的知识点进行合并,但是我无从下手。最后还是不同的一个一个合并了。本题还有对字符串的长度和以及首字母的顺序进行了排序,这运用了Comparator<String>进行字符串的比较,和Tressset不能有重复的知识点。

期中测试:

本次考试题量为四题,考察的知识点为继承,方法的重写,多态,以及在构造方法的时候对条件进行限制。最后一题还考察了泛型的正向排序。list.sort(Comparator.naturalOrder());//正向排序,这个排序方法继承了接口comparator,接口需要将它的抽象方法进行全部重写。比较的时候大于返回1,小于返回-1,等于返回0 。

第四次大作业设计与分析:

7-1 菜单计价程序-4
分数 100
作者 蔡轲
单位 南昌航空大学

本体大部分内容与菜单计价程序-3相同,增加的部分用加粗文字进行了标注。

设计点菜计价程序,根据输入的信息,计算并输出总价格。

输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。

菜单由一条或多条菜品记录组成,每条记录一行

每条菜品记录包含:菜名、基础价格 两个信息。

订单分:桌号标识、点菜记录和删除信息、代点菜信息。每一类信息都可包含一条或多条记录,每条记录一行或多行。

桌号标识独占一行,包含两个信息:桌号、时间。

桌号以下的所有记录都是本桌的记录,直至下一个桌号标识。

点菜记录包含:序号、菜名、份额、份数。份额可选项包括:1、2、3,分别代表小、中、大份。

不同份额菜价的计算方法:小份菜的价格=菜品的基础价格。中份菜的价格=菜品的基础价格1.5。小份菜的价格=菜品的基础价格2。如果计算出现小数,按四舍五入的规则进行处理。

删除记录格式:序号 delete

标识删除对应序号的那条点菜记录。

如果序号不对,输出"delete error"

代点菜信息包含:桌号 序号 菜品名称 份额 分数

代点菜是当前桌为另外一桌点菜,信息中的桌号是另一桌的桌号,带点菜的价格计算在当前这一桌。

程序最后按输入的桌号从小到大的顺序依次输出每一桌的总价(注意:由于有代点菜的功能,总价不一定等于当前桌上的菜的价格之和)。

每桌的总价等于那一桌所有菜的价格之和乘以折扣。如存在小数,按四舍五入规则计算,保留整数。

折扣的计算方法(注:以下时间段均按闭区间计算):

周一至周五营业时间与折扣:晚上(17:00-20:30)8折,周一至周五中午(10:30--14:30)6折,其余时间不营业。

周末全价,营业时间:9:30-21:30

如果下单时间不在营业范围内,输出"table " + t.tableNum + " out of opening hours"

参考以下类的模板进行设计(本内容与计价程序之前相同,其他类根据需要自行定义):

菜品类:对应菜谱上一道菜的信息。

Dish {

String name;//菜品名称

int unit_price; //单价

int getPrice(int portion)//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份) }

菜谱类:对应菜谱,包含饭店提供的所有菜的信息。

Menu {

Dish[] dishs ;//菜品数组,保存所有菜品信息

Dish searthDish(String dishName)//根据菜名在菜谱中查找菜品信息,返回Dish对象。

Dish addDish(String dishName,int unit_price)//添加一道菜品信息

}

点菜记录类:保存订单上的一道菜品记录

Record {

int orderNum;//序号

Dish d;//菜品\\

int portion;//份额(1/2/3代表小/中/大份)

int getPrice()//计价,计算本条记录的价格

}

订单类:保存用户点的所有菜的信息。

Order {

Record[] records;//保存订单上每一道的记录

int getTotalPrice()//计算订单的总价

Record addARecord(int orderNum,String dishName,int portion,int num)//添加一条菜品信息到订单中。

delARecordByOrderNum(int orderNum)//根据序号删除一条记录

findRecordByNum(int orderNum)//根据序号查找一条记录

}

本次课题比菜单计价系列-3增加的异常情况:

1、菜谱信息与订单信息混合,应忽略夹在订单信息中的菜谱信息。输出:"invalid dish"

2、桌号所带时间格式合法(格式见输入格式部分说明,其中年必须是4位数字,月、日、时、分、秒可以是1位或2位数),数据非法,比如:2023/15/16 ,输出桌号+" date error"

3、同一桌菜名、份额相同的点菜记录要合并成一条进行计算,否则可能会出现四舍五入的误差。

4、重复删除,重复的删除记录输出"deduplication :"+序号。

5、代点菜时,桌号不存在,输出"Table number :"+被点菜桌号+" does not exist";本次作业不考虑两桌记录时间不匹配的情况。

6、菜谱信息中出现重复的菜品名,以最后一条记录为准。

7、如果有重复的桌号信息,如果两条信息的时间不在同一时间段,(时段的认定:周一到周五的中午或晚上是同一时段,或者周末时间间隔1小时(不含一小时整,精确到秒)以内算统一时段),此时输出结果按不同的记录分别计价。

8、重复的桌号信息如果两条信息的时间在同一时间段,此时输出结果时合并点菜记录统一计价。前提:两个的桌号信息的时间都在有效时间段以内。计算每一桌总价要先合并符合本条件的饭桌的点菜记录,统一计价输出。

9、份额超出范围(1、2、3)输出:序号+" portion out of range "+份额,份额不能超过1位,否则为非法格式,参照第13条输出。

10、份数超出范围,每桌不超过15份,超出范围输出:序号+" num out of range "+份数。份数必须为数值,最高位不能为0,否则按非法格式参照第16条输出。

11、桌号超出范围[1,55]。输出:桌号 +" table num out of range",桌号必须为1位或多位数值,最高位不能为0,否则按非法格式参照第16条输出。

12、菜谱信息中菜价超出范围(区间(0,300)),输出:菜品名+" price out of range "+价格,菜价必须为数值,最高位不能为0,否则按非法格式参照第16条输出。

13、时间输入有效但超出范围[2022.1.1-2023.12.31],输出:"not a valid time period"

14、一条点菜记录中若格式正确,但数据出现问题,如:菜名不存在、份额超出范围、份数超出范围,按记录中从左到右的次序优先级由高到低,输出时只提示优先级最高的那个错误。

15、每桌的点菜记录的序号必须按从小到大的顺序排列(可以不连续,也可以不从1开始),未按序排列序号的输出:"record serial number sequence error"。当前记录忽略。(代点菜信息的序号除外)

16、所有记录其它非法格式输入,统一输出"wrong format"

17、如果记录以“table”开头,对应记录的格式或者数据不符合桌号的要求,那一桌下面定义的所有信息无论正确或错误均忽略,不做处理。如果记录不是以“table”开头,比如“tab le 55 2023/3/2 12/00/00”,该条记录认为是错误记录,后面所有的信息并入上一桌一起计算。

本次作业比菜单计价系列-3增加的功能:

菜单输入时增加特色菜,特色菜的输入格式:菜品名+英文空格+基础价格+"T"

例如:麻婆豆腐 9 T

菜价的计算方法:

周一至周五 7折, 周末全价。

注意:不同的四舍五入顺序可能会造成误差,请按以下步骤累计一桌菜的菜价:

计算每条记录的菜价:将每份菜的单价按份额进行四舍五入运算后,乘以份数计算多份的价格,然后乘以折扣,再进行四舍五入,得到本条记录的最终支付价格。

最后将所有记录的菜价累加得到整桌菜的价格。

输入格式:

桌号标识格式:table + 序号 +英文空格+ 日期(格式:YYYY/MM/DD)+英文空格+ 时间(24小时制格式: HH/MM/SS)

菜品记录格式:

菜名+英文空格+基础价格

如果有多条相同的菜名的记录,菜品的基础价格以最后一条记录为准。

点菜记录格式:序号+英文空格+菜名+英文空格+份额+英文空格+份数注:份额可输入(1/2/3), 1代表小份,2代表中份,3代表大份。

删除记录格式:序号 +英文空格+delete

代点菜信息包含:桌号+英文空格+序号+英文空格+菜品名称+英文空格+份额+英文空格+分数

最后一条记录以“end”结束。

 

分析:

刚拿到这题的时候,我只是盲目的和以前一样,运用现有的知识点进行书写。但是我写完提交代码后只有36分。

看到这么多对格式错误的处理都没看到增加了这么多的限制条件的时候,我选择去学习了一下正则表达式方便后面的代码设计,[0-9]* 表示0-9的数字可以有无数个,\\S+ 表示可以有无数个字符串,中英文都可以,[1-9][0-9]* 表示由数字构成的任意数字但是数字的首位不能是0。然后根据这些,定义一些特定的格式,看这些字符串是否匹配这些格式。

 对于普通菜的正则,

 特色菜的正则表达式。

 这是正确的桌号正则表达式,前面为英文字母table,后面是数字和日期的处理正则,因为可以1位也可以是2位 “|” 表示或者的意思

 删除的正则表达式,前面表示要删除的序号。

 代点菜的正则表达式。

在对正则表达式学习完后对输入的限制进行了大量的增加,那些格式错误自然而然就解决了。但是又有了一个新的问题,我对时间的处理好像也出现了问题。我之前对时间的处理并不是很好,没有运用locadata类,只是将时间中的年月日提取出来再进行比较的,这无法对同一桌号是否同一时间进行判断。学习了Localdate类可以进行判断。

 对特定的格式进行转换。

 根据特定格式转为LocalDateTime类。

 判断是否为一个时间的范围内。

 date中 的until中的ChronoUnit.SECONDS 一个时间和另一个时间相差的秒数,也可以用于相差的天数,年数,月份。

 可以直接根据字符串转化,获取星期。

本次还比第三次增加了是否为正确的顺序,这需要每次添加的时候进行一个判断。

 确保一个正向排序。如果不是正向的,输出

题目中我定义了一些变量进行一些基本的限制,

 如果前面的那些正则表达式都没有符合,那么就要判断是不是第一次错现错误,在判断是否首位为table,来进行进一步的辨析下面的数据是否要进行处理

 类图的设计:

 从类图的设计中可以看出,在Dish类中添加一个区分是否为特色菜的记录。

根据flag的值为后续的判断该菜是否为特色菜进行判断。类图中设计中增加了三个判断的类,tablejudge,recordjudge,dishjudge 对数据进行处理,和用一些条件判断是否符合要求。tablejudge判断桌号的格式,前面首位是否为table,进行后面的数据是否进行处理。时间输入的有效性,在处理时间的有效性的时候,我运用了LOcaDatatime,当计算年月日的时候,转为Localdata进行处理,当考虑时分秒的时候,转为Local time进行处理。桌号是否在符规定的范围内。recordjudge中对是否为正确的记录,份额,份数是否在规定的范围内。判断是否为特色菜的处理,不同的格式对不同的菜进行记录。Menu中增加了对特色菜和非特色菜的记录。在主函数的计算价钱的时候四舍五入开始的时候总是相差1,这代表四舍五入出现了问题,这需要将特色菜和非特色菜的价钱的分别进行计算再乘以相应的折扣。record类中由getD的方法判断是否为特色菜。

第四次大作业踩坑心得:

1.

 这个错误我卡了好久,一直很疑惑为什么错误。我发现这个错误还是在我跑步的时候,发现自己对边界值的测试没有考虑的很全面。

 它在边界点也是成立的,所以当时间在那两个边界点的时候,无法通过测试点。

2.

 这个测试点还是比较难找的,因为在代点菜的时候需要考虑桌号是否存在,可是忽略了(傻逼会自己给自己)点菜这个。这个也需要输出相应的结果,我真的服了这个测试点。

3.

 这个还是比较容易修改的,只需要按照提示进行修改就可以了。

4.比较相差的时间,查找了许多资料一直没有找到自己想要的那种。发现了until中的ChronoUnit可以比较两者相差的时间。

5.

题目中提到了如果出现table的格式错误,后面的数据不进行处理,我刚开始并没有很好考虑并进行设计。但是在添加这项功能的时候还是比较繁琐,因为当都正确的时候要正常处理,错误首位不是table的如何进行处理。因此我引入了变量tablename,根据它的值进行判断。如果都正确的格式且首位是table的话则对其数字进行更新

6.

我这次大作业的时候我只会用特定的格式进行转化,但是虽然题目中给的时间格式是这样的YYYY/MM/DD HH/MM/SS,但是题目中又给出分钟,月份,天数可以是一位又可以是两位数。我盲目用

 这中格式进行转换的话,当给的为一位数字的话,就会无法进行转换,并且出现非零返回。

7.

 这是计算两个时间类相差的秒钟的算法,我刚开始在3600的时候也添加 了等号,但是测试点无法通过,我进行了一些控制变量的调试,我明白3600秒并没有在符合时间的规定范围内。

8. 在计算总价的时候,我相信不止我一个人在总价的地方卡了好久吧!每次算出来的价格有时候相同,有时候少一。而造成问题所在原因就是我在四舍五入的地方错现了错误。我们应该在计算完特色菜和非特色菜总价的时候就要进行四舍五入,而不是两者相加后再进行四舍五入。

第五次大作业设计与分析:

7-1 菜单计价程序-5
分数 100
作者 蔡轲
单位 南昌航空大学

本题在菜单计价程序-3的基础上增加了部分内容,增加的内容用加粗字体标识。

注意不是菜单计价程序-4,本题和菜单计价程序-4同属菜单计价程序-3的两个不同迭代分支。


设计点菜计价程序,根据输入的信息,计算并输出总价格。

 

输入内容按先后顺序包括两部分:菜单、订单,最后以"end"结束。

 

菜单由一条或多条菜品记录组成,每条记录一行

 

每条菜品记录包含:菜名、基础价格  三个信息。

 

订单分:桌号标识、点菜记录和删除信息、代点菜信息。每一类信息都可包含一条或多条记录,每条记录一行或多行。

 

桌号标识独占一行,包含两个信息:桌号、时间。

 

桌号以下的所有记录都是本桌的记录,直至下一个桌号标识。

 

点菜记录包含:序号、菜名、份额、份数。份额可选项包括:1、2、3,分别代表小、中、大份。

 

不同份额菜价的计算方法:小份菜的价格=菜品的基础价格。中份菜的价格=菜品的基础价格1.5。小份菜的价格=菜品的基础价格2。如果计算出现小数,按四舍五入的规则进行处理。

 

删除记录格式:序号  delete

 

标识删除对应序号的那条点菜记录。

 

如果序号不对,输出"delete error"

 

代点菜信息包含:桌号 序号 菜品名称 口味度 份额 份数

 

代点菜是当前桌为另外一桌点菜,信息中的桌号是另一桌的桌号,带点菜的价格计算在当前这一桌。

 

程序最后按输入的先后顺序依次输出每一桌的总价(注意:由于有代点菜的功能,总价不一定等于当前桌上的菜的价格之和)。

 

每桌的总价等于那一桌所有菜的价格之和乘以折扣。如存在小数,按四舍五入规则计算,保留整数。

 

折扣的计算方法(注:以下时间段均按闭区间计算):

 

周一至周五营业时间与折扣:晚上(17:00-20:30)8折,周一至周五中午(10:30--14:30)6折,其余时间不营业。

 

周末全价,营业时间:9:30-21:30

 

如果下单时间不在营业范围内,输出"table " + t.tableNum + " out of opening hours"

 

参考以下类的模板进行设计:菜品类:对应菜谱上一道菜的信息。

 

Dish {    

 

   String name;//菜品名称    

 

   int unit_price;    //单价    

 

   int getPrice(int portion)//计算菜品价格的方法,输入参数是点菜的份额(输入数据只能是1/2/3,代表小/中/大份)    }

 

菜谱类:对应菜谱,包含饭店提供的所有菜的信息。

 

Menu {

 

   Dish[] dishs ;//菜品数组,保存所有菜品信息

 

   Dish searthDish(String dishName)//根据菜名在菜谱中查找菜品信息,返回Dish对象。

 

   Dish addDish(String dishName,int unit_price)//添加一道菜品信息

 

}

 

点菜记录类:保存订单上的一道菜品记录

 

Record {

 

   int orderNum;//序号\\

 

   Dish d;//菜品\\

 

   int portion;//份额(1/2/3代表小/中/大份)\\

 

   int getPrice()//计价,计算本条记录的价格\\

 

}

 

订单类:保存用户点的所有菜的信息。

 

Order {

 

   Record[] records;//保存订单上每一道的记录

 

   int getTotalPrice()//计算订单的总价

 

   Record addARecord(int orderNum,String dishName,int portion,int num)//添加一条菜品信息到订单中。

 

   delARecordByOrderNum(int orderNum)//根据序号删除一条记录

 

   findRecordByNum(int orderNum)//根据序号查找一条记录

 

}

分析:

 类图的设计:

 

 本次大作业是属于与第四次类似的在第三次大作业上进行了相关的迭代,第四次对桌号,菜品格式,菜品信息,点菜的记录进行了大量的判断。而本次大作业更多的是点菜为特色菜这方面的处理比较多。我这次设计了一个ParseInput类专门处理输入的信息,符合要求进入,不符合则退出,Dish类中任然是特色菜和非特色菜两中构造函数,而Menu则对这些菜品添加各自的记录。在Order类中添加了SiNum,Sivalue,JinNum,JinValue,zheNum,zheValue 的各自系列菜品的数量,和味度的计算。Table中根据它的味度平均值,对应相应的数组中的字符串的值,输出对应的中文。Order中的PanDan对特色菜的输入的范围进行了一定的判断。对桌号的电话号码的正则我认为还是比较值的学习的。table [1-9][0-9]* : \\S{0,10} 1((8[0|1|9])|(3[3|5|6]))[0-9]{8} [0-9]{4}/([0-9]{2}|[0-9])/([0-9]{2}|[0-9]) ([0-9]{2}|[0-9])/([0-9]{2}|[0-9])/([0-9]{2}|[0-9]) ,\\S{0,10}这表明字符串的位数在0-10之前,1((8[0|1|9])|(3[3|5|6]))[0-9]{8} 这表面了数字为11位,并且前三位一定要为180、181、189、133、135、136其中之一。 对于增加记录的,我这次比前几次不同的是对代点菜增加了记录,因为它参与了味道和份额数的计算。并且在Dish中添加了cuisine的变量,判断特色菜的菜系。对不同的进行了不同的增加记录。

 本次我没有向上一次一样直接用字符串格式转换,因为那个只适用于每位数字都是两位的,一位还需要手动添加,显得有点麻烦。

 而这样处理就避免了这样的问题。

 本次折扣直接在时间的判断就将特色菜和非特色菜的折扣计算出来了,不需要后续再进行处理。本次代点菜我认为也是比较有特色菜的,因为一个桌给另一桌点菜的时候,我们需要给被点的那桌的记录进行添加,因此要判断哪个增加记录了。

 这个数组可以很好的处理输出该桌的口味度,因为我们在进行处理它口味度平均值的时候,刚好是根据0-*的顺序进行输出口味度,而我们已经知道了什么数字对应什么口味度,因此可以设计一个这样的数组进行处理。

 在考虑代点菜的时候要考虑这个菜是否为特色菜才能够很好的添加到对应的数据中去。

第五次大作业踩坑心得:

1.

 格式错误,这个我觉得这个测试点我觉得还挺难找的,因为格式错误一般是多了一个空格或者多了一行的问题,这个测试点则是当没有任何一个特色菜的时候,后面需要有一个空格。而我的代码则没有考虑到这一点。

2.

 这几个测试点都是我代点菜的问题,当代点菜记录的格式以及信息出现错误,我没有进行一定的处理。我刚开始没有这么多个添加记录的格式,但是不同的记录需要不同的处理方法,因此我在这上面进行了一些功能的添加。

3.

 含删除记录的,这个我开始的时候只是对价钱进行了删除,但是特色菜的份数,以及口味度的平均值都没有进行删除。

4.

 这个的原因是我将添加份数的不小心删除,后面进行了代码的调试,才找到问题所在。

5.

 当一个菜品一个都没有的时候是不需要进行输出的,我们需要加入一个限制条件。

6.

 这样的代码它是不包含两边的边界值的,而在考察边界值的时候会出现错误,我们还需要加两个等于该时间的代码。

7.

 每个正则表达式判断的时候都要加一个flag的值,因为如果前面桌号格式错误的话,如果是table开头的,则后面的数据我们是不进行处理的

8. 

 题目中要合并相同名字的一桌,因为我运用到了泛型的知识点,我刚开始用到了contains来判断是否含有相同姓名的桌号并返回,然后将这个桌号的数据加入到最先出现这个名字的桌号上,再将这个桌号进行删除,但是因为我进行了循环遍历,当我将数据进行删除的时候,遍历的时候,一个数据会缺失,当三个桌号名字相同的时候并在一个连续的位置上,这样会出现非零返回的错误。后面我又用了双指针的查找删除,但这样时间就超时了。于是我就重新创建了一个新的桌号,但是我第一个出现的姓名桌号已经要了后面的数据,所以我图中的操作只需要将后面出现的相同姓名的桌号删除就可以了。

9.

 在ParseInput类我没有new这个对象,这样里面被调用的方法需要定义为static类型,类中方法调用自己的方法也需要变为static。

期中测试设计与分析:

 

7-1 测验1-圆类设计
分数 12
作者 段喜龙
单位 南昌航空大学

创建一个圆形类(Circle),私有属性为圆的半径,从控制台输入圆的半径,输出圆的面积

输入格式:

输入圆的半径,取值范围为(0,+∞),输入数据非法,则程序输出Wrong Format,注意:只考虑从控制台输入数值的情况

输出格式:

输出圆的面积(保留两位小数,可以使用String.format(“%.2f”,输出数值)控制精度)

 分析:

这一题还是一个比较基础的题目,只考察了一个构造函数,但是在构造的时候有一个限制条件。但是我在处理输出的问题没有处理好,当R<0时,我还是输出了它对应的面积,但实际上它并没有成功赋值。因此需要添加一个限制条件。

 

7-2 测验2-类结构设计
分数 18
 

分析:

本题考察了聚集这个知识点,聚集是整体与部分的关系,长方形由左上和右下两个点构成。但是点可以脱离长方形独立存在,因此只能用聚集而不能够用组合。这题主要是对如何正确写出聚集的代码,聚集是在该类外卖new后再进行赋值给长方形内的变量。而组合则是在new长方形的时候一起new的。

 
7-3 测验3-继承与多态
分数 30

分析:

这个题目是对前两次代码进行了一些结合,只是添加了一些功能。本题考察了继承的知识点,区分是否为继承的关系用is a,可以很好进行判断。因为长方形和圆都继承了图形这个类,在构造函数的时候可以进行向上向下转型。本题的打印图形的面积,调用的是整个父类,这样就可以体现设计的多态性,传入子类的一种都可以进行打印。

 
7-4 测验4-抽象类与接口
分数 40
 

分析:

这题的主函数已经给出不需要自己重新设计,而且其他代码也大部分是前面几题的结合,但是这题考察了对泛型知识点的掌握程度,写这道题的时候我并不知道怎么写,因为泛型的一些特殊性质我不是很清楚,于是先按照提示对Shape继承了一个比较的接口。接口需重写它里面的方法,但是只有一个参数怎么进行比较呢!开始无从下手,但是我看到了该类自身就有一个获取自身面积的方法。于是我就进行了一下初步的尝试。没想到还真的做对了。

期中测试踩坑心得:

1. 开始在求圆的面积的时候并没有用到数学库里的Π,而是直接用3.14计算了,但是好像在四舍五入之后会出现一些细微的偏差。

2.

 没有考虑r=0的情况,边界测试考虑的不够周全。

3.

 可以直接跟自身获取的面积进行比较,不需要什么新建变量那些操作。

4. 输出的数字需要保留两位小数,

主要困难及改进建议:

在写了这几次的菜单系列的大作业,我认为主要困难就是对于类的设计,每个类应该具备什么样的职责和功能,各个类之间又彼此具备一个什么样的关系。面对那么对的限制条件约束的情况下,我们应该如何合理的设计,在哪些地方添加一些条件实现这类功能。对于时间类的一些基本用法和语法没有进行灵活的运用,正则的一些表达这些都是对于写代码的一些考验。在接下来的时间查阅一下相关的资料进行进一步的了解和学习关于localdata以及localdatatime的用法,以及用于一些比较难以普通条件限制的东西,灵活的运用正则表达式进行解决问题。以及对于泛型的一些特殊的用法。不能很好的将代码耦合度降低,代码之间的调用关系设计的不是很清楚。希望老师在发出大作业的时候能够及时给出提示,并增加一些测试点,比如那个格式错误的空格,要考虑自身那桌的代点菜这些测试点真的很难发现,需要花费大量的时间进行测试。没有提示的话就更加难受了,写了60几分,就像在大海里捞针一样,捡到几分就是几分,没有一点头绪。希望老师在每次大作业结束后可以对这次大作业进行一些适当的讲解,怎么设计类的关系,为什么这样设计,如何对这么多约束条件进行一些处理。怎么能够很好的降低圈复杂度,降低类与类之间的耦合度,实现代码的多次重复利用。

总结:

这几次大作业学会了许多新的知识点。学会了类与类的几种基本关系,关联,聚集,组合,依赖等关系,如何判断两个类之间的关系,清楚两者之间的关系之后如何在代码中进行一定的体现。学会了如何在特定的字符串格式下转化为Localdata类,以及知道年月日时分秒的构造时间类,时间类之间的一些计算方法。学会了正则表达式,对给定的一些字符串,数字,特定的符号进行一定的限制,进行逐一的比较。最让我印象深刻的应该就是对于边界值的测试了,这几次的大作业都卡在了一个对于边界的测试点上。这说明以后考虑问题要周全,将每个方面都考虑清楚。希望下次写的时候可以适当增加一些注释,否则下次进行迭代的时候又不能很清晰的知道自己的代码逻辑了,还需要花费时间进行进一步的梳理。

posted @ 2023-05-17 21:36  里奥科  阅读(62)  评论(1编辑  收藏  举报