前言:
个人感觉
第一次练习主要是类的构建和相互运用的基础练习,像是第一题便是从风扇类的构建入手,然后逐渐添加对类的运用和类之间关联的需求,最后一题除了是这些需求的结合版以外,还是接下来两次练习最后一题的基底
第二次练习在第一次练习的基础上不仅增加了类与类之间关系掌握和运用的难度,像是7-3一题以提前给出一些代码并要求在此基础之上进行对题目需求的完成,还考验对他人代码的可读能力,最后一题则是在前次练习的基础上增加功能,有点像工作时甲方突然增加需求的感觉(_)
第三次练习有点第二次练习加强版的感觉,像是7-1像是前面考验对他人代码的可读能力的题目的加强版,7-2则是对类的构建和相互运用的加强版,最后一题也是在前面题目的基础上增加功能
整体题量虽然减少,但每题的难度是不断增加的
设计与分析:
相比后两次练习的,这题较简单,因为该题提前给了题目的数量,之前也没想那么多,所以创建了题目类和答案类之后分别把问题和答案分别提取,最后再进行对比输出就提交上去了
因为该题输入格式与第一次练习的不同,所以输入方法改为以输入不为end为条件的循环来进行数据的总录入,再通过输入字符串的第一个字符来判断信息录入哪一种类
这里比较注意的应该是输入.hasNext()的使用,前面因为在录入信息时没增加该条件时不时蹦出来错误提示
因为输出警告的信息要求第一输出,所以试卷类增添了警告输出的功能并先行输出,之后再通过从试卷上提取的题号所对应的题目和对应的输入的答案来输出要求的题目部分,再对比提取出的题目的答案和对应的输入的答案来完成最后对答案正确与否的判定,再通过其判定来决定总分的加与否和最后输出的内容
对我来说这里比较要命的是这一大串内容都放在一个类的构造方法里面去做,导致代码太长,可读性很差
与之前的练习不同,该题增加了学号和对应学生姓名的输入,所以我在代码中新增加了学生类来保存学生信息,并在该类里增加了以对应学号输出对应姓名的构造方法public String S(String num),除此之外,因为该题答案的输入格式与之前题目的输入格式不同,所以通过修改输入方法增加了对学号的输入好在最后添加对应学号的学生姓名的数据
这里我之前为了检验时输出好看在录入答案信息时用'\n'来隔开每个单独的数据,结果在添加功能时不知为何有时取出对应序号的.substring(序号1,序号2)时会出错,最后是通过录入时把'\n'去掉,换成其他分隔用的符号来解决的
除了学号和学生姓名,该题还要求添加题目的删除功能,于是我在代码中新增加了删除类来保存删除的题目信息,在对答案的最终判定前,先对题目是否删除进行判定,再决定输出的内容和最后得分的多少,除了对题目是否删除的判定,应题目要求,我还增加了对题目是否有误的判定来决定最后得分的多少和输出的内容,来达成输出的正确
这里因为要求对有误的题目进行优先级最大的输出,所以在题目录入里增加了对题目是否有误的判断和对应的输出有误的是否,以此来在输出对试卷是否达到一百分的判定前输出
踩坑心得:
最主要也是最大的坑还得是最后一题(.~.)
同样是增加需求,第二次增加需求比第一次难了许多
一是第一次增加时主要的判断和输出都在一个类的构造方法中,第二次增加需求时看了好久,最后还得删掉大部分来达成需求
二是我个人的代码在对输入进行录入和统计时把数据提取后重新构建了一番,导致在判断错误格式输入时难下手(最后也有好几题不知为啥过不了)
在BUG方面
对我个人来说大多是因为没考虑到变量的全局变化或变量的数据类型
其他包括但不限于
1.比较字符串和某字符串.substring(j,i)时用==不行,而用equals可行
2.循环时没把控住变量的变化导致错误或无限循环
3.字符串.substring(j,i)调用失误导致Integer.valueOf失败
4.在测试整体输出时添加了几个System.out.println(),回头要删除时找不到在哪
改进建议:
第三次练习的7-3和第二次练习的7-4
这两次练习都有个严重的错误---主要的判断和输出都在一个类的构造方法中,第二次练习的7-4主要是没考虑到将来代码修改的可能,导致代码杂合在了一起,虽然第三次练习的7-3我也尽量修改了,但由于时间不够以及还在纠结着还没通过的测试点,最后还是把大多数判断和输出都放在一个类的构造方法里了。
修改上可以把一些该构造方法里判定的原数据通过原类的构造方法来进行提取,这样可以减少对原数据提取所需求的代码数量来减少该构造方法里代码的复杂度,以此来增加代码的可读性
除此之外,也因为主要的判断和输出都在一个类的构造方法中,这就导致在构建构造方法构建间隔较大时不知道什么时候什么变量是什么值,最后只好新建变量,结果变量越建越多,不知道该不该动的变量也越来越多,这也是该代码如此复杂,构建时如此耗时的主要原因之一,
修改上一是可以把一些变量改为较为明显的名称,像是text_num,score_num之类可英译的变量,避免i,j等不知何时何地使用的变量
二是可以在使用变量时在该段末尾加上//注释,方便了解变量的使用方法和该变量使用的意义
第三次练习的7-2
由于输入的形式是数字-数字-数字的形式,在录入时采取的是输入字符串的形式,后面再用Integer.valueOf来进行数字上的计算,但Integer.valueOf套用太多(尤其是和字符串.substring(j,i)一起套用时)会造成代码冗长
修改上可以把对应的数字用Integer.valueOf通过新建变量并赋值的方式提取出来,这样套用时方便又简洁
总结:
在作业的题目上,个人感觉难点的题目如果样例给较全点较好,第三次练习的最后一题凡是跟错误格式输入有关的都没通过,把样例的数据都代进去也都可以过,也试了其他几个我能想到的错误格式,但最后也还是没查出来到底哪里出错了
这三次练习难度循序渐进,个人感觉蛮有锻炼价值的,无论是面向对象的方面还是对java的类的使用方面,尤其是最后一题,后两次练习的最后一题都是建立在前一次练习的最后一题的基础上的,锻炼的不仅是对原来代码的修改,还有的是为将来代码修改的可能对代码可读性和可添加功能性的精进和专研
个人感想:
在后面的作业中,为了能尽量避免错误的发生,再加上时间有点紧张并还要对测试点不通过地方进行修改,我避免了正则表达式,继承等我不怎么熟悉的方式来完成作业,这是不应该的,学习未知的知识是课程的目的之一,在今后的作业中我会尽量努力使用不熟的方式来完成作业。
这三次练习并不是全部,java的学习才刚刚开始,不止是类的定义、对象的创建。封装,继承,多态,子类,父类。。。。。。
还有许多或大或小的未知等着我去探索,今后我依然会努力学习java,充满对新知识的渴望
标签:输出,题目,构造方法,代码,练习,第一次,Blog,输入 From: https://www.cnblogs.com/htzero/p/18142534