基于题目集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-日期类的基本使用

这个题目有问题,奈何我天资愚笨,没能发现,经上网了解才发觉,却为时已晚。但好在经过分析我已经理解。

题目大概如下:

  1. 给定一个日期,判定是否为合法日期。如果合法,判断该年是否闰年,该日期是当年第几天、当月第几天、当周第几天、。
  2. 给定起始日期与结束日期,判定日期是否合法且结束日期是否早于起始日期。如果均合法,输出结束日期与起始日期之间的相差的天数、月数、念书。
                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。

主要困难以及改进建议

在代码编写中,遇到以下主要困难:

  1. 逻辑错误:逻辑错误是最常见的问题之一。可能是由于对条件判断、循环或函数的理解不准确,导致程序的行为出现了错误。

解决方法:仔细检查代码的逻辑,使用调试工具逐行跟踪代码的执行,查看变量的值是否符合预期,确认代码的逻辑是否正确。

  1. 调试问题:当代码无法正常运行或产生错误信息时,调试变得关键。可能会遇到找不到bug、调试信息不足等问题。

解决方法:使用调试工具逐行跟踪代码执行,通过观察变量的值、打印调试信息或使用断点等方式,尽可能缩小问题范围,找到问题所在。

  1. 性能优化:在处理大量数据或复杂算法时,可能遇到性能问题,如代码执行速度慢、内存占用过高等。

解决方法:使用合适的数据结构和算法,优化代码逻辑,避免重复计算,减少内存使用等。可以使用性能分析工具定位瓶颈,并对问题进行有针对性的优化。

改进建议:

  1. 学习和掌握基本的编程原理和概念,例如变量、数据类型、条件语句、循环结构等。良好的编程基础能够帮助理解和解决代码中的问题。

  2. 阅读和研究优秀的代码范例或开源项目,了解其他人是如何解决类似问题的。通过学习他人的经验和技巧,可以提升自己的编程水平。

  3. 不要害怕查找资料和提问。遇到问题时,可以通过搜索引擎、编程社区或论坛等途径查找相关资料或向他人请教。分享问题并寻求帮助,往往能够获得解决问题的新思路。

  4. 多动手实践,通过实际编写代码来加深对编程知识的理解和运用。不断练习和尝试,积累经验,并逐渐提高解决问题的能力。

  5. 细心排查和检查代码,习惯注释和代码风格良好。注释和良好的代码风格可以提高代码的可读性,降低出错的概率。

总结

通过此次实验的整理与学习,我在感觉java编程方面有了很大的进步,同时也更好的理解的面向对象的编程思路,懂得程序设计的可用性以及代码编写的规范性!并且拥有了更好的代码执行经验 首先在标识符、变量、以及数据类型方面,通过学习,我了解到标识符明白必须规范,不能随便定义,当以下划线(_)等此类符号定义时,方可通过java编译,否则则会运行报错,另外在定义变量时,int,double也要注意区分,虽然都能进行计算,但是其精度是不一样的!在java中一共有8中数据类型,分别是int,long,short,float,double,char,boolean,byte,除此之外,在创建多个变量时不能重名,并且一定在变量赋值之后才能用,同一条语句中可以定义多条变量。 其次在对数组的使用时,有俩种方式定义数组,一种是直接new Object[int i]另外一种是直接在定义的数组后边写{}在里面赋值即可。在使用数组时,我常常遇到报错问题,例如访问数组的元素超过了索引的范围,告诉我数组越界,这时我将重新判断数组,以保证程序正常运行。总之本次实验收获很大,未来可期。

 

 
posted @ 2023-10-07 10:56  小火炉y  阅读(38)  评论(0)    收藏  举报