首页 > 其他 > 详细

第三次课设报告

时间:2020-06-09 22:40:16      阅读:58      评论:0      收藏:0      [点我收藏+]

前言

这一段时间,我们主要就前两个月的学习,进行了复习和总结并且还了解了部分关于堆栈,hash储存的知识。

1.本阶段实验过程总结

本阶段的实验较前两阶段难度上有稍许提升但工作量却减少了不少目的也和前两次不同,这次实验主要是考验锻炼我们设计算法来编写程序的能力不同与前两次的数据校验和类设计,这次主要的难点是在算法的设计和完善上。
第一次实验就只有一题--雨刷系统设计,题目类型是之前类设计学习的过渡和延伸,需要我们设计多个类来解决题目的要求,需要我们运用到多态和程序设计模式,来解决实现题目可延展性的问题。题目主要的难点在于接口和抽象类的使用和选择,在这次实验中我设计了Agent,Dial,Lever三个接口,分别来代表题目雨刷系统,刻度盘和档位三个对象,然后通过向上转型实现了程序的多态和可复用性,类图如下技术分享图片

第二次实验的题目是统计Java程序中关键词的出现次数,题目类型是之前数据校验处理学习的过渡和延伸,需要我们熟练的对字符串进行删除和分割操作。题目难点是不清楚题目的测试点,不好把握字符串的分割统计操作,尤其是对一些奇怪输入的处理能力。代码注释,字符串数据都不统计在内,这里的正则表达式很不好处理。我就在这里栽了坑,对于这道题我遗憾颇多,就代码长度而言,这是最短的几次实验之一,然而所花时长却是最多的,自我感觉,老师的测试点有点偏,让我找不到切入点,不过这也可能跟之前在正则这一方面的知识,我掌握的不好有关,最后我只争取了部分测试点,遗憾颇多。然后就是对Map的应用,这里的统计需要根据关键词的首字母进行排序和数量的统计,所以我选择了TreeSet。代码:技术分享图片

第三次实验是本阶段学习的核心,在这里算法的设计就显的尤为重要,题目是用代码实现四则运算,由一个四则运算表达式字符串计算出答案,这里首先需要对字符串进行处理,先去空格在进行正则判断排查括号匹配,符号规则问题,我采用的是分割后判断的方法。代码如下。技术分享图片

 

 

 

 判断完后在利用堆栈的方法进行四则运算,这里我查了一些网上的代码,我发现了有递归和逻辑循环两种算法,虽然网上有这些算法的思想,但大多不完善,都存在负号不好入栈的问题,我选择的是循环的方法,判断优先级,实际操作后发现负号算式容易出现问题的现象,因为当运行完含括号的算式后,程序需要从后往前进行运算,若遇到类似(-a+b)的算式就会得到-(a+b)这样无实意的答案,并且遇到(a+-b)时,程序就就会出现报错问题,然后我进行了将负号和其后面的实数一起入数栈的操作,代码如下。技术分享图片

 

 

 接着程序当遇到就单一算式-a时就会得出a这一答案这个问题又继续困扰着我,原因是我的代码没有对符号栈剩余数据的判断,为此我加了数据判断代码。当字符串算式存在分母为零时,为此我运用了System.exit(0)结束程序和Main.Str调用为处理字符串。当字符串存在a+-b算式时程序会直接输出Wrong Format,为此我加了将a+-b变为a-b的代码。等等终于在我多次的发现 解决问题后,我完善了这个程序。之后我还实现了老师给的算法,也发现了负号容易出错的问题,(而且问题颇大,不大好改),后来我有看了一个关于递归的算法,发现它很好的解决了负号容易出错的问题,因为它不存在从后往前的运算,比循环方便了很多。经历本次实验后,我收获良多,发现了算法的魅力,和选择合适的算法的重要性。

2.本阶段设计心得

1.类的属性不能过多,体现单一职责原则及类的封装性,向上转型运用多态实现系统的可扩展性,系统扩展时接口与抽象类可以方便实现程序的可复用性。

2.正确的使用List、Set或Map可以更好的简化代码和提高运行效率。

3.遇到数据间关系比较密切的实际问题时,栈是一种很好的解决办法。

3.本阶段课程收获

1)对Java设计模式有了更深的理解。

(2)正则表达式运用的更加熟练。

(3)对Java各个原则有了跟深刻的理解。

(4)了解了List、Set和Map的数据储存方式。

(5)了解了用栈解决实际问题的方法。

(6)习得了一些简单算法的设计。

4.对课设建议:无

 

 

 

 

 

第三次课设报告

原文:https://www.cnblogs.com/3065-905323/p/13081218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!