基于题目集1~3的总结
经过三周的学习,发现了我有很多不足之处,正好通过本次bolg来总结反思一下吧。
后悔第三次作业没好好做wuwuwuw..........,可能就是这样总会有遗憾的。
前言
三次题目集中我真的很想吐槽第三次的作业,您真是高估我们的水平了,我们没您想的那么厉害,我们是一群小废物。前两次的题目难度,代码量都是我们可以承受的范围,接下来先分析一下三个题目集的知识点,题量和难度。
第一次题目集,不用多说,九道题,轻轻松松,简简单单,简单的if判断就可以轻松过测试点。
第二次题目集,有点难度,代码量也上来一点,但也可以承受。但我要吐槽“jmu-java-日期类的基本使用”这个题,害死我了啊,之后再分析一下这个题,题目二中还包含菜单计价系列题目,不得不说这系列题目对目前的我们来说还是有一定难度的。对了对了,还有一些数据处理的内容。
第三次题目集,留有遗憾。虽然只有四道题,其中还有上次的原题也就是我上面提到的“jmu-java-日期类的基本使用”,我真无语住了,题目集的第二题也是很难受,对我们目前来说还是够呛,可能也存在时间问题,没想到短时间内写不完,根本就写不完,感觉第二题直接就是做个学生成绩管理系统。
设计与分析
此部分主要分析下几个重难点题目集2的7-1、7-2、7-8以及题目集3的7-2。
本次分析主要参考SourceMonitor的生成报表内容,因为PowerDesigner对我不太友好。
- 7-1 成绩计算-1-类、数组的基本运用
简单来说就是封装学生类,for循环输入输出,注意数据类型,接下来通过SourceMonitor分析一下。


首先,查看代码规模指标,代码行数80,了解代码的大小。通过分析代码的复杂性低和维护难度较低。
其次,关注代码的复杂度指标,如圈复杂度和平均方法复杂度。圈复杂度表示一个方法中可能的执行路径数量,较高的圈复杂度可能意味着代码逻辑复杂,难以理解和测试。
另外,查看重复代码指标,如代码的重复行数和重复率。重复代码会增加维护和修改的工作量,并可能引入bug。通过识别和消除重复代码,可以提高代码的可读性和可维护性。
最后,关注代码质量指标,如代码行的平均长度和注释行的平均长度。较长的代码行可能难以阅读,而缺乏注释的代码可能难以理解。通过优化代码的格式和添加清晰的注释,可以提高代码的可读性和可维护性。
综上所述,通过分析SourceMonitor的结果,本次代码的规模、复杂度和代码质量是处于一个不错的状态的。
- 7-2 成绩计算-2-关联类


首先,查看代码规模指标,代码行数89,了解代码的大小。通过分析代码的复杂性低和维护难度较低。
其次,关注代码的复杂度指标,如圈复杂度和平均方法复杂度。圈复杂度表示一个方法中可能的执行路径数量,较高的圈复杂度可能意味着代码逻辑复杂,难以理解和测试。
另外,查看重复代码指标,如代码的重复行数和重复率。重复代码会增加维护和修改的工作量,并可能引入bug。通过识别和消除重复代码,可以提高代码的可读性和可维护性。
最后,关注代码质量指标,如代码行的平均长度和注释行的平均长度。较长的代码行可能难以阅读,而缺乏注释的代码可能难以理解。通过优化代码的格式和添加清晰的注释,可以提高代码的可读性和可维护性。
综上所述,通过分析SourceMonitor的结果,本次代码的规模、复杂度和代码质量是处于一个不错的状态的。
- 7-8 jmu-java-日期类的基本使用
这个题目有问题,奈何我天资愚笨,没能发现,经上网了解才发觉,却为时已晚。但好在经过分析我已经理解。
题目大概如下:
- 给定一个日期,判定是否为合法日期。如果合法,判断该年是否闰年,该日期是当年第几天、当月第几天、当周第几天、。
- 给定起始日期与结束日期,判定日期是否合法且结束日期是否早于起始日期。如果均合法,输出结束日期与起始日期之间的相差的天数、月数、念书。
try { Date star = dft.parse(arr1[0]); String[] st1=arr1[0].split("-"); int t1=Integer.parseInt(st1[1]); int t11=Integer.parseInt(st1[0]); String[] st2=arr1[1].split("-"); int t2=Integer.parseInt(st2[1]); int t22=Integer.parseInt(st2[0]); Date end = dft.parse(arr1[1]); int i1=0; int i2=0; int i3=0; if (star.before(end)){ Year firstYear = Year.of(t11); i3=t22-t11; Calendar c1 = Calendar.getInstance(); c1.set(t11, t1-1, Integer.parseInt(st1[2])); int yearDay = c1.get(Calendar.DAY_OF_YEAR); Calendar c2 = Calendar.getInstance(); c2.set(t22, t2-1, Integer.parseInt(st2[2])); int yearDa2y = c2.get(Calendar.DAY_OF_YEAR); if (firstYear.isLeap(t11)){ int temp=yearDa2y+(366-yearDay); for (int i=t11+1;i<t22;i++){ if (firstYear.isLeap(i)){ i1=i1+366; }else { i1=i1+365; } } i1=i1+temp; }else { int temp=yearDa2y+(365-yearDay); for (int i=t11+1;i<t22;i++){ if (firstYear.isLeap(i)){ i1=i1+366; }else { i1=i1+365; } } i1=i1+temp; } i2=Integer.parseInt(st2[1])-Integer.parseInt(st1[1]); } if (end.before(star)){ System.out.println(arr1[1]+"早于"+arr1[0]+",不合法!"); System.exit(0); } if ((judge(t11,t1,Integer.parseInt(st1[2]))==true)&&judge(t22,t2,Integer.parseInt(st2[2]))==true){ System.out.println(arr1[1]+"与"+arr1[0]+"之间相差"+i1+"天,"+"所在月份相差"+i2+",所在年份相差"+i3+"."); }else { System.out.println(arr1[0]+"或"+arr1[1]+"中有不合法的日期."); } }


首先,查看代码规模指标,代码行数190,了解代码的大小。通过分析代码的复杂性低和维护难度较低。
其次,关注代码的复杂度指标,如圈复杂度和平均方法复杂度。圈复杂度表示一个方法中可能的执行路径数量,较高的圈复杂度可能意味着代码逻辑复杂,难以理解和测试。
另外,查看重复代码指标,如代码的重复行数和重复率。重复代码会增加维护和修改的工作量,并可能引入bug。通过识别和消除重复代码,可以提高代码的可读性和可维护性。
最后,关注代码质量指标,如代码行的平均长度和注释行的平均长度。较长的代码行可能难以阅读,而缺乏注释的代码可能难以理解。通过优化代码的格式和添加清晰的注释,可以提高代码的可读性和可维护性。
综上所述,通过分析SourceMonitor的结果,本次代码的规模、复杂度和代码质量是处于一个不错的状态的。
-
7-2 课程成绩统计程序-1
这个题目,由于我没做出来,下面代码借用一下来分析哈哈
个人认为这就是个学生成绩管理系统,四百行的代码,说起来也不多,也不少。




首先,查看代码规模指标,代码行数402,了解代码的大小。通过分析代码的复杂性低和维护难度较低。
其次,关注代码的复杂度指标,如圈复杂度和平均方法复杂度。圈复杂度表示一个方法中可能的执行路径数量,较高的圈复杂度可能意味着代码逻辑复杂,难以理解和测试。
另外,查看重复代码指标,如代码的重复行数和重复率。重复代码会增加维护和修改的工作量,并可能引入bug。通过识别和消除重复代码,可以提高代码的可读性和可维护性。
最后,关注代码质量指标,如代码行的平均长度和注释行的平均长度。较长的代码行可能难以阅读,而缺乏注释的代码可能难以理解。通过优化代码的格式和添加清晰的注释,可以提高代码的可读性和可维护性。
综上所述,通过分析SourceMonitor的结果,本次代码的规模、复杂度和代码质量是处于一个不错的状态的。
踩坑心得
在本次作业中,我印象最深的就是第二次7_8。下面给大家分享一下。

根据样例可以正常输入输出,但是这是神马测试点啊,真的很难受。
这到底是什么bug,是我的问题嘛
if (star.before(end)){ Year firstYear = Year.of(t11); i3=t22-t11; Calendar c1 = Calendar.getInstance(); //这里有bug必须减1 c1.set(t11, t1-1, Integer.parseInt(st1[2])); // 设置年月日,时分秒将默认采用当前值 int yearDay = c1.get(Calendar.DAY_OF_YEAR); Calendar c2 = Calendar.getInstance(); //这里有bug必须减1 c2.set(t22, t2-1, Integer.parseInt(st2[2])); // 设置年月日,时分秒将默认采用当前值 int yearDa2y = c2.get(Calendar.DAY_OF_YEAR); if (firstYear.isLeap(t11)){ int temp=yearDa2y+(366-yearDay); for (int i=t11+1;i<t22;i++){ if (firstYear.isLeap(i)){ i1=i1+366; }else { i1=i1+365; } } i1=i1+temp; }
经过上网查询才得以解惑,希望大家以后有问题不要自己苦想,没用,没有一点用,上网查查,问问同学,比自己想来的更快,更直观,自己想有点浪费时间的感jio。
主要困难以及改进建议
在代码编写中,遇到以下主要困难:
- 逻辑错误:逻辑错误是最常见的问题之一。可能是由于对条件判断、循环或函数的理解不准确,导致程序的行为出现了错误。
解决方法:仔细检查代码的逻辑,使用调试工具逐行跟踪代码的执行,查看变量的值是否符合预期,确认代码的逻辑是否正确。
- 调试问题:当代码无法正常运行或产生错误信息时,调试变得关键。可能会遇到找不到bug、调试信息不足等问题。
解决方法:使用调试工具逐行跟踪代码执行,通过观察变量的值、打印调试信息或使用断点等方式,尽可能缩小问题范围,找到问题所在。
- 性能优化:在处理大量数据或复杂算法时,可能遇到性能问题,如代码执行速度慢、内存占用过高等。
解决方法:使用合适的数据结构和算法,优化代码逻辑,避免重复计算,减少内存使用等。可以使用性能分析工具定位瓶颈,并对问题进行有针对性的优化。
改进建议:
-
学习和掌握基本的编程原理和概念,例如变量、数据类型、条件语句、循环结构等。良好的编程基础能够帮助理解和解决代码中的问题。
-
阅读和研究优秀的代码范例或开源项目,了解其他人是如何解决类似问题的。通过学习他人的经验和技巧,可以提升自己的编程水平。
-
不要害怕查找资料和提问。遇到问题时,可以通过搜索引擎、编程社区或论坛等途径查找相关资料或向他人请教。分享问题并寻求帮助,往往能够获得解决问题的新思路。
-
多动手实践,通过实际编写代码来加深对编程知识的理解和运用。不断练习和尝试,积累经验,并逐渐提高解决问题的能力。
-
细心排查和检查代码,习惯注释和代码风格良好。注释和良好的代码风格可以提高代码的可读性,降低出错的概率。
总结
通过此次实验的整理与学习,我在感觉java编程方面有了很大的进步,同时也更好的理解的面向对象的编程思路,懂得程序设计的可用性以及代码编写的规范性!并且拥有了更好的代码执行经验 首先在标识符、变量、以及数据类型方面,通过学习,我了解到标识符明白必须规范,不能随便定义,当以下划线(_)等此类符号定义时,方可通过java编译,否则则会运行报错,另外在定义变量时,int,double也要注意区分,虽然都能进行计算,但是其精度是不一样的!在java中一共有8中数据类型,分别是int,long,short,float,double,char,boolean,byte,除此之外,在创建多个变量时不能重名,并且一定在变量赋值之后才能用,同一条语句中可以定义多条变量。 其次在对数组的使用时,有俩种方式定义数组,一种是直接new Object[int i]另外一种是直接在定义的数组后边写{}在里面赋值即可。在使用数组时,我常常遇到报错问题,例如访问数组的元素超过了索引的范围,告诉我数组越界,这时我将重新判断数组,以保证程序正常运行。总之本次实验收获很大,未来可期。

浙公网安备 33010602011771号