第一次博客作业 blog-1
在学习Java编程过程中,我完成了三次题目集的练习。这些题目涵盖了不同的知识点,题量逐渐增加,难度也逐渐提升。通过解决这些题目,我巩固了Java编程的基础知识,并提升了编程技能。下面我将对这三次题目集进行总结。第一次题目集题目涉及到了基本的数学运算、条件判断、字符串处理等知识点。题目数量适中,适合初学者进行练习。难度较低,有助于理解和掌握基本的编程概念和语法。第二次题目集主要涉及到了条件判断、循环结构、数组等知识点。相较于第一次题目集,题目的难度略有提升,同时也增加了对数组和日期类的使用。通过这些题目的练习,我对条件判断和循环结构的应用有了更深入的理解。第三次题目集涉及到了更多的编程概念和技巧,如函数封装、面向对象编程、字符串操作等。题目的难度相对较高,需要综合运用多个知识点解决问题。通过解决这些题目,我进一步提升了编程能力,并对面向对象编程有了更深入的理解。
本次博客我主要对这几个题目的设计进行分析:菜单计价程序1、菜单计价程序2、菜单计价程序3、判断两个日期的先后,计算间隔天数、周数
菜单计价程序1设计:
Dish类中的getPrice()方法根据不同份额计算菜品的价格,采用四舍五入规则进行处理。Menu类中的searchDish()方法根据菜名在菜谱中查找菜品信息,并返回Dish对象。Order类中的addARecord()方法用于添加一条点菜记录到订单中,并根据记录计算总价。- 主程序中通过循环读取用户输入的点菜记录,解析菜名和份额,并进行菜品查找和添加到订单的操作。

菜单计价程序2分析:
- 首先,我们定义了几个类来实现点菜计价程序:
Dish表示菜品信息,Menu表示菜谱,Record表示点菜记录,Order表示订单。 Dish类包含菜品名称和基础价格,并提供计算菜品价格的方法。Menu类包含菜谱中的所有菜品信息,并提供查找菜品的方法。Record类包含菜品和份额信息,并提供计算记录价格的方法。Order类用于保存用户点的所有菜品信息,并提供计算订单总价的方法。- 主程序根据输入的点菜记录,通过菜谱查找菜品信息,并添加到订单中,最后计算订单的总价并输出。
菜单计价程序2设计:
-
Dish类:
- 表示一个菜品,包含菜名和单价信息。
- 提供了计算不同分量下的价格的方法。
- 通过构造函数初始化菜品信息。
-
Menu类:
- 用于管理菜单,包括添加菜品和查找菜品的功能。
- 使用HashMap来存储菜品信息,以菜名作为键,Dish对象作为值。
- 提供了根据菜名查找菜品的方法和添加菜品的方法。
-
Record类:
- 表示一个点菜记录,包含订单号、菜品、分量和数量等信息。
- 提供了计算该记录的价格的方法,根据菜品的分量和数量计算价格。
- 通过构造函数初始化点菜记录的信息。
-
Order类:
- 用于管理订单,包括添加记录、删除记录和计算订单总价等功能。
- 使用Record数组来存储订单中的点菜记录。
- 提供了添加记录、删除记录和计算订单总价的方法。
-
Main类:
- 是程序的入口,包含了主程序逻辑。
- 在Main类中初始化菜单,并创建一个Order对象用于管理订单。
- 解析菜单和订单信息,根据输入的菜单和订单记录进行点菜计价处理。
- 输出每条点菜记录的处理信息,包括序号、菜名和价格。
- 最后输出订单上所有菜品的总价。

菜单计价程序2分析:整体设计采用了类的封装和模块化的思想,将不同的功能模块分别封装到不同的类中,提高了代码的可维护性和可扩展性。每个类都具有明确的职责和功能,相互之间通过方法调用来完成协作。通过合理的类设计和类之间的关联关系,实现了点菜计价程序的需求。
菜单计价程序3设计:
- 该程序使用了面向对象的设计思想,通过定义了几个类来表示菜单、菜品、点菜记录和订单,并在
Main类中实现了主程序逻辑。 Dish类表示一个菜品,包含菜名和单价信息,并提供了计算不同分量下的价格的方法。Menu类用于管理菜单,包括添加菜品和查找菜品的功能。Record类表示一个点菜记录,包含订单号、菜品、分量和数量等信息,并提供了计算该记录的价格的方法。Order类用于管理订单,包括添加记录、删除记录和计算订单总价等功能。Main类是程序的入口,包含了主程序逻辑,包括解析菜单和订单信息,并进行点菜计价处理。

菜单计价程序3分析:
- 代码通过使用类和对象的方式进行了模块化和封装,提高了代码的可读性和可维护性。
- 使用
Map数据结构来存储菜单和订单记录,实现了快速的查找和删除操作。 - 菜单和订单记录的操作封装在相应的类中,使得主程序逻辑更加清晰和简洁。
- 程序通过解析输入字符串来获取菜单和订单信息,使用字符串分割和类型转换等操作来提取和处理数据。
- 增加了营业时间的判断逻辑,根据不同的时间段对菜品价格进行折扣处理。
- 程序在控制台输出点菜记录和订单总价,提供了简单的交互和结果展示。
判断两个日期的先后,计算间隔天数、周数设计:
LocalDate类:Java 8引入的日期和时间API,用于表示日期。它提供了多种方法用于日期之间的比较和计算。ChronoUnit类:Java 8引入的日期和时间API中的一个类,提供了多个日期单位,如天、周、月等。在示例中,我们使用了DAYS和WEEKS单位。Scanner类:Java中的标准输入类,用于从键盘读取用户输入。parse()方法:LocalDate类中的一个静态方法,用于将日期字符串解析为LocalDate对象。isBefore()和isAfter()方法:LocalDate类中的方法,用于比较两个日期的先后关系。until()方法:LocalDate类中的方法,用于计算两个日期之间的间隔,接受一个日期单位作为参数。
判断两个日期的先后,计算间隔天数、周数分析:
- 首先,使用
Scanner类从用户输入中读取两个日期字符串,并将它们转换为LocalDate对象。 - 然后,通过
isBefore()和isAfter()方法判断两个日期的先后关系,根据判断结果输出相应的提示信息。 - 使用
until()方法结合ChronoUnit.DAYS和ChronoUnit.WEEKS单位计算两个日期之间的间隔天数和周数。 - 最后,将计算结果输出到控制台。
在上面讨论的题目中,我们涉及了点菜计价程序的设计和实现。下面是一些常见的采坑心得和解决方案的总结:
题目理解和需求明确:
在开始编写代码之前,确保充分理解题目的要求和需求。仔细阅读题目,理解各个类的作用、数据的输入输出格式以及计算逻辑等。
确保与需求方进行充分的沟通,澄清疑问,明确需求细节,以避免后续修改和调整的麻烦。
输入格式和错误处理:
注意对输入格式进行合法性验证和错误处理。例如,对份额的输入进行范围检查,对菜品的查找结果进行判空处理等。
考虑到用户可能输入错误的菜品名,可以在输出中提示并继续接受下一条记录,而不是直接中断程序执行。
代码复用和模块化设计:
在设计类和方法时,考虑代码的复用性和模块化性。合理划分类的职责,将相关的功能放在同一个类中,提高代码的可维护性和可扩展性。可以将一些通用的功能封装成方法,以便在其他项目中复用。例如,在计算菜品价格时采用了四舍五入的规则,可以将其封装成公共方法。
测试和调试:
在编写代码之后,进行全面的测试和调试是非常重要的。针对各种情况,包括边界情况和异常情况,进行测试,并验证代码的正确性和健壮性。
使用调试工具进行逐行调试,查看变量的值和程序的执行流程,以便发现和解决问题。
总之,编写和提交源码的过程中,需要对题目进行充分理解,注意数据的输入输出格式和错误处理,设计合适的数据结构和算法,注重代码复用和模块化设计,进行全面的测试和调试。这些采坑心得可以帮助我们更好地编写和提交源码,提高代码质量和效率。
下面是一些主要困难以及改进建议,以及对相应题目的编码改进的见解:
代码逻辑复杂度高:有些题目的逻辑较为复杂,包含多个条件判断、循环和嵌套等,容易导致代码逻辑复杂度高,可读性差,难以维护和扩展。改进建议:尽量将复杂的逻辑拆分成小的模块和函数,采用合适的命名和注释来提高代码的可读性。考虑使用面向对象的设计思想,将不同功能的代码封装成类,提高代码的可维护性和可扩展性。
输入输出格式处理困难:题目要求可能涉及复杂的输入输出格式,如日期格式、字符串格式等。在处理这些格式时,可能会遇到解析、转换和格式化等困难。改进建议:使用现有的工具类和方法来处理复杂的输入输出格式,如Java提供的日期处理类、正则表达式、字符串处理方法等。可以查阅相关文档和资料,学习和掌握处理不同格式的技巧和方法。
在本阶段的三次题目集中,我学到了许多关于Java编程的知识和技能。通过解决这些题目,我对Java语言的基本语法和常用类有了更深入的了解,并提升了编程能力和解决问题的能力。
从题目集的角度来看,这些题目涵盖了多个方面的知识点,包括数学计算、字符串处理、条件判断、循环、数组、面向对象编程等。通过解答这些题目,我对这些知识点的应用有了更深刻的理解,并学会了将它们应用到实际问题中。
在解题过程中,我也发现了一些需要进一步学习和研究的地方。首先,对于一些复杂的问题,我需要进一步提高自己的算法设计和优化能力,以找到更高效和可靠的解决方案。其次,在处理输入输出格式和边界条件时,我需要学习更多的技巧和方法,以确保程序的正确性和稳定性。
对于三个题目集方面,我有以下改进建议和意见:
1. 提供更详细的题目说明:有时候题目的表述可能不够清晰,容易引起理解上的困惑。建议在题目中提供更详细的说明和示例,以帮助学生更好地理解题意。
2. 强调编码规范和最佳实践:在题目的要求中可以加入对编码规范和最佳实践的要求,例如命名规范、注释要求、代码风格等。这有助于培养良好的编码习惯和提高代码的可读性和可维护性。
3. 提供范例代码和解析:对于每个题目,可以提供范例代码和解析,以便学生参考和学习。这有助于学生理解问题的解决思路和方法。
总之,通过本阶段的题目集,我在Java编程方面取得了一定的进步,并发现了自己需要进一步学习和提高的地方。希望在后续的学习中能够持续改进,并在实际项目中能够更好地应用所学知识和技能。同时,希望教师和课程能够根据学生的反馈和需求进行改进,提供更好的学习体验和教学效果。

浙公网安备 33010602011771号