第二次博客作业

一、作业总结

该次博客作业是对菜单计价程序-4、菜单计价程序-5、期中测试的一次总结。这次的菜单计价程序在之前的基础上进行了更完善的更改升级,菜单计价程序-4在菜单计价程序-3的基础上增加了异常情况的处理,菜单计价程序-5在菜单计价程序-3的基础上增加了特色菜的深入特殊化处理,期中测试则是考察以面向对象思想的编程能力。在这几次的作业中,我对自己的代码在之前的基础上进行了一定的更改,目的是增强自己代码的可读性和灵活性,让自己的代码更完善,通过更合理的分工以及数据的合理储存,让相应的类完成本该属于自己的工作,以及相应的数据放到合理的类中,以达到代码工作和数据处理的合理分配和储存。这几次的作业让我对Java中的面向对象思想更加深刻,对其有了更完善的了解,对于每个分出的类,其中的数据和方法做到谁的工作和数据,就放到对应的类中,这样能做到代码更清晰可读,在符合逻辑的基础上,对代码的更改完善也会变得更轻松简单,一旦发现问题,无论是逻辑上的出错还是编译时代码写错,都能能迅速发现和更改。同时为了完成该次作业,我也学会了try-catch的使用,以及正则表达式的使用。但这几次的作业也同样让我认识到逻辑思维的严谨对一个程序来说有多么重要,这几次的作业都没拿到满分甚至是高分,有很大一部分原因真是因为我考虑的不够严谨,所想的程序总是会遗漏一些特殊情况导致扣分。接下来是我对这三次作业的简要析。

二、对各个作业的简要分析

1.菜单计价程序-4

这道题在菜单计价程序-3的基础上增加了特色菜的处理以及大量异常输入的处理,对于该题我发现原有的代码主体部分不足以满足要求,不好进行增加特色菜和异常处理的代码更改,于是我进行了一定的调整。首先是特色菜的处理。由于特色菜与普通菜都是属于菜品,属于菜品的数据处理工作,所以我在处理菜品的类:Dish类中增加了Boolean T来达到合并的效果,一旦处理数据为特色菜,则T为true,反之为false,这样既避免了多加一个类来处理,又方便了数据的使用。

这样后续的处理区分特色菜和普通菜,并不用花费什么力气,只需要判断Dish类中的T即可。

 由于该次作业含大量的异常输入,我第一想到的就是刚学的try-catch来处理。通过含参构造将输入的数据存入Record类或Menu类中或对Record类中的数据进行处理,由于每一种正确输入的格式都是确定且不变的,所以每次输入的数据一旦为异常输入,则不满足方法中参数的格式,从而进行相应的报错处理,这时可以通过try-catch来对异常数据进行相应的处理。在此之前我学了try-catch的使用方法,而try-catch对我的感觉就像是特殊的if-else,通俗地来说就是if报错,则else,也就是一旦try中抛出错误,则catch抓住错误,再通过catch中的代码进行更正。由于try中抛出的错误种类有很多,catch抓住的错误也就要进行一定的处理,比如时间错误:DateTimeException,一旦抛出时间错误,就要用catch(DateTimeException w)来抓住,再通过catch中的代码进行更正,这是对特定错误的处理,而对于一般广泛的无差别错误处理,则可用Exception来抓住所有错误,这是因为其实Java中报错的也是由类来完成,而Exception类是所有报错的类的父类。另外如特殊需要,也可以通过throw new ArithmeticException()语句强行抛出错误。有了以上的基础,我将main类中输入的数据分三个模块处理,代码进行了如下调整

模块一,菜单菜品的输入

这是菜单中菜品数据输入的程序模块,通过while循环来不断重复着菜品输入的过程

 这是菜单adddish方法的代码,通过含参构造方法来将数据储存

如之前所说,特色菜和普通菜在菜品输入时的区别就是特色菜后面有个“T”,他们完全可以像如图一样合并为一个方法,在输入时由于仍然采用之前菜单计价程序-3的方法,将一行的数据储存在mation中,再通过split以空格分割成若干份并储存在数组k中,特色菜和普通菜的输入就能用k的长度来区分,从而进行如图操作,如果是特色菜则k的长度为3,将每个数据输入方法中即可,而如果是普通菜,则k的长度是2,在adddish方法的最后一个参数(用来储存标记是否是特色菜,如果该参数为T,则标记该菜为特色菜,也就该菜的dish.T=true)的输入为非“T”的任意一个字符,已达特色菜或普通菜菜品数据储存的目的。这时如果格式并不是菜单菜品的输入,则必然抛出一个异常,由于该异常没有特殊性这时可以用Exception来捕捉异常。此时有两种可能的情况,一种是输入的数据是接下来订单的数据,这样只需要用break语句跳出菜品输入程序的while循环即可,而另一种则是异常数据输入情况,按照题目要求,只需要输出“wrong format”即可,然后在最后进行下一次输入和对输入的分割完成此次循环。接下来轮到订单输入程序模块,该模块又分了多个部分

模块二,订单输入模块

table数据的存入,如果输入数据满足格式,则进行桌子记录,记录该桌订单信息,同时完成了输入空格过多的异常输入情况的处理

 对时间错误抛出的捕捉及处理,一旦时间输入不和要求则完成相应的异常输入处理

 对点菜和代点菜的处理通过不断的异常抛出及捕捉将点菜和代点菜完成,其余由于格式错误,此时输入的数据要么是删菜要么是下一桌菜的信息要么是异常输入,由下一个catch异常捕捉处理

 对删菜的处理,此时输入的数据要么是下一桌菜的信息要么是异常输入,由下一个catch异常捕捉处理

 对乱入菜单的处理,由于题目样例中出现订单里出现菜单乱入的情况,对此进行了一定的处理

 对table合法其数据非法的处理

 对table其他异常输入的处理

根据题目要求,一但table的数据输入错误,那么忽略接下来的所有订单数据,于是可以通过如下代码完成该操作

 该模块就是通过题目所给出的异常输入样例来逐一排查处理异常,模块二完成

模块三,最终数据输出

代码如上

这次的作业没拿到高分,主要是因为考虑的情况还是没考虑周全

2.菜单计价程序-5

这次的作业在菜单计价程序-3的基础上增加了特色菜系,每桌菜都有点订单的人名和电话号码,不同于菜单计价程序-4中的特色菜,菜单计价程序-5的特色菜有川菜、晋菜、浙菜之分,而且增加了口味度,在最后对每桌菜订单数据的输出增加了按英文字典顺序输出。首先处理人名、电话数据,由于人名和电话是和订单桌号相联系又对应关系的,我认为人名和电话应该属于table类中的属性,只需要在table类中加入人名、电话号属性即可,又因为每一桌的订单都有可能有特色菜及其口味度,所以又需要增加特色菜数和口味度属性,table类更改代码如下

 又因为最后还要进行按人名用英文字典顺序输出,所以要用到每个table类中的name属性,这时排序的工作如果仍然用table类来完成显然有些不太合适,所以我创建了一个shop类,既能储存每个table类的数据,也能调用各个table类中的数据完成排序、输出数据等操作

 而排序通过冒泡排序法和compareTo方法来完成,shop类中的tnum为桌号的角标,用以记录table的数量

接下来轮到特色菜的处理,受菜单计价程序-4的启发,我发现点普通菜、点特色菜、代点普通菜、代点特色菜能够用一个方法合并,代码如下

 首先对是否有该菜品做判断,然后对特色菜、普通菜输入格式是否正确(特色菜以普通菜的格式输入的错误)做判断,如果都没问题则将数据进行储存处理,然后再看是否是特色菜,如果是,将对该条数据进行特色菜处理

至此大部分的代码以及修改完毕,只需要改main方法即可

由于做这次作业,并没有大量异常输入,并且发现用正则表达式会更简洁,而菜单计价程序-3的main类对数据的处理方面太差,我决定用正则表达式来完成数据的处理。在之前的学习中我了解了正则表达式的用法,首先格式的配对用matches方法,matches判断是否相等boolean返回值,substring[]看字符位置如【0,1】是首位,以此类推、\\d表示配对数字(字符型)"+"代表多位、\\s表示配对空格也可以直接输入空格、\\w表示配对单个字母、\\D表示配对除数字外任何单个字符(包括中文)、[\u4e00-\u9fa5]+匹配多个中文,有了这个知识点作为基础,于是main类对数据的处理就有了如下代码的更改

对菜品输入的处理分为普通菜、特色菜、错误输入,通过while循环来进行菜品的不断输入储存等处理,如果输入的数据分割后的第一个字符串为table说明菜品的输入结束,接下来是订单数据处理,代码如下

 通过如上操作可以完成点普通菜、点特色菜、代点普通菜、代点特色菜、删菜的数据处理,同时也完成了菜单超时、菜单格式错误的操作

这次没拿到满分的原因我也不知道,就是有三分怎么都拿不到,想过很多异常情况,但都不是考点

3.期中测试

这次的期中测试考察我们面向对象思想的编程,相对于菜单计价程序来说是相对简单的,期中测试分四道题,第一题写圆类设计,第二题写方形设计,第三题利用继承和多态,将前两题的类合并起来,通过shap类作为父类,circle类和rectangle类继承shap类来完成,第四道题测试代码是否能完成对多个数据的处理

这次的期中考试没写好因为思想太固化了,rectangle类中题目所给出来的提示说该类中输入的两个点的参数分别为左上角和右下角,于是我在算面积时并没有加绝对值,导致一直出错,虽然我想到是否要加个绝对值,但我相信左上角和右下角数据进行一定的处理不可能出现负数的情况,所以一直在想其他问题,导致时间白白浪费了,从而来不及做第四题

                                                              ——3509字

 

posted @ 2023-05-17 17:25  无的之矢  阅读(204)  评论(0)    收藏  举报