最后一次Blog

BLOG:

 

1.前言:最后几周的PTA难度明显上升,需要设计的类更多,尤其是学生成绩录入系统。还更考察对集合的使用,如Map,Set集合,利用他们自动排序 去重的功能,完成题目.

难度呈递增趋势。自己还是太菜,许多题目就没有拿到满分。随着本次的博客作业到来也预示着我的本学期的Java课程也来到了尾声,而本次的博客不仅仅是对近段时间

以来的学习做一个介绍,也是对本学期做一个总结。

 

2.设计与分析:

 

7-1 课程成绩统计程序-1

 

类图:

 

 

 


image.png

 

 

 

 

只过了51分,后面对异常的处理自己处理起来太费劲了。

 

 

 要明白如何对数据进行处理,否则难以写对。

 

利用如何构造方法,对最后的成绩进行计算。

 

 

合理设计成绩的计算方法。

 

 相关方法代码.

 

输入与输出类。

 

 此题是后面几道题的基础,后面会在此基础上拓展。

 

7-1 统计Java程序中关键词的出现次数

输入格式:

输入Java源码字符串,可以一行或多行,以exit行作为结束标志

输出格式:

  • 当未输入源码时,程序输出Wrong Format
  • 当没有统计数据时,输出为空
  • 当有统计数据时,关键字按照升序排列,每行输出一个关键字及数量,格式为数量\t关键字

输入样例:

在这里给出一组输入。例如:

//Test public method
public HashMap(int initialCapacity) {
        this(initialCapacity, DEFAULT_LOAD_FACTOR);
    }
    public HashMap(int initialCapacity, float loadFactor) {
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal initial capacity: " +
                                               initialCapacity);
        if (initialCapacity > MAXIMUM_CAPACITY)
            initialCapacity = MAXIMUM_CAPACITY;
        if (loadFactor <= 0 || Float.isNaN(loadFactor))
            throw new IllegalArgumentException("Illegal load factor: " +
                                               loadFactor);
        this.loadFactor = loadFactor;
        this.threshold = tableSizeFor(initialCapacity);
    }
exit
 

输出样例:

在这里给出相应的输出。例如:

1	float
3	if
2	int
2	new
2	public
3	this
2	throw
此题较上题较为简单,没有复杂的类图设计。
 

 

 7-3 课程成绩统计程序-2

参考类图(与第一次相同,其余内容自行补充):


e724fa4193aa9ee32e78a68cd96fd6df_22401e04-c501-4b28-bb65-dabe39d374e7.png

 

 

 

这道题较1增加了实验成绩,所有要设计实验成绩类,并构造方法里增加数组。

注意计算实验成绩时,要对数组进行遍历。

 

利用集合处理分数。同理,与1一样 ,方法里进行遍历与查找,计算最后的总成绩。

 

 

相关成绩的计算方法,就是挨个遍历相关集合,找到与目标一致的数据,累加相除得到平均分。

 

最后输出结果。

 

 

 

 

 

 

 此题较1比较,更加复杂。类之间关系要更精密。对异常的处理还没法应付。只写了正常输入情况。

 

7-2 课程成绩统计程序-3

课程成绩统计程序-3在第二次的基础上修改了计算总成绩的方式,

要求:修改类结构,将成绩类的继承关系改为组合关系,成绩信息由课程成绩类和分项成绩类组成,课程成绩类组合分项成绩类,分项成绩类由成绩分值和权重两个属性构成。

完成课程成绩统计程序-2、3两次程序后,比较继承和组合关系的区别。思考一下哪一种关系运用上更灵活,更能够适应变更。

题目最后的参考类图未做修改,大家根据要求自行调整,以下内容加粗字体显示的内容为本次新增的内容。

 

参考类图(与第一次相同,其余内容自行补充):

fdada4ca193119ee30531ab82ffebbfa_9dbcf4e8-1627-4cf6-8764-cccf44947e2a.png

 

 

 

 

 

 

 与1,2不同这次要自己录入绩点。

其他的计算方法与1,2类似,要修改计算的方法,实验成绩方法计算要改进。

 

 

 

 用数组构造实验成绩。

 

 两个构造方法

 

 相关成绩的计算方法:

 

 

 

 

 

 

 

 

 

 

 

总体上这道题三次迭代越来越难,各有特色。但对异常情况的处理,都没好好解决。自己努力还是不够。

 

做每一个题目集是不要轻言放弃,要迎难而上,自己努力去学。

 

遇到复杂的系统问题不能慌张,要静下心,一步一步分析。问题就会迎刃而解。

 

 

 3.踩坑心得:

 

对于这三道题,总体来说是能写出来的努力写了,不会的怎么也写不出。

 

1.首先写系统的输入,要学会用lambda表达式筛选信息。

 

2.其次可以书写多个构造方法,构造一个类的不同情况

 

3.对于复杂的数据,可以储存在集合中对数据处理,然后输出。

 

4.在方法中多次循环,会出现重复遍历的情况,增加内存。

 

5.对异常的处理,要从录入情况开始,不要到最后判断。否则很难。

 

6.从这次作业,我们才真正开始了对于类的设计,通过这一次作业我相信我们对于类的运用,会更加的熟悉,在第一题中,

就已经开始了对于类的设计,一开始的时候,要设计主类和子类,在这两个类里面,要实现相应的功能,在子类中有运用了许多的方法,

实现多功能编程

 

 

4.改进建议:

输入时,我应该把main函数里的方法放在一个新构造的类中,这样在主类中就不会那么繁琐,

思路看起来也更清晰,可读性更强。更重要的是,Java本生为我们提供了很多诸如截取字符

串,排序......等诸多方法供我们直接调用,这样会节约很多时间。

 

并且,我应该多用类来写功能,

而不是什么代码都挤到同一个类中,调试起来就很麻烦,而且利用率低,可重复性不高。

 

而且判断筛选信息时,使用多次if else if判断,代码可读性不强,过于复杂。

成员方法设计有些许问题,导致参数在方法里多次循环,浪费时间与内存。

 

 

5。总结:

 

这次是本学期最后一次作业。这学期学到很多java知识,能不能熟练运用就靠自己了。

 

1.首先关于正则表达式我觉得还是非常有必要将它弄懂,因为它在判断字符串时非常有用。效率很高很方便。

 

2.做每一个题目集是不要轻言放弃,要把自己能写的努力去写。

 

3.搞清楚类的关系,是关联 依赖 还是聚合 组合。方便设计类图。

 

4.学会仔细读题,不然最后出错要从头来过,重新设计,浪费时间精力。

 

5.在面向对象设计中,不要所有代码写在一个类,要分而治之,增加利用率,可读性。

 

 

在最后的学习阶段,学到了很多有用的知识,如集合框架,lambda ,正则表达式。

 

在许多细节方面,要多多学习,不能马虎,要熟练运用所学知识,如果不多加练习,终是

 

纸上谈兵,自己理解不深。

 

教学建议:

 

我觉得老师可以出一些比较中等的题目,能稍微给点提示,给出一个较为标准的答案,给那些没有头绪设计类关系的同学一些提示,不然自己研究很浪费时间精力,

 

在每次作业完结后,应该对难题进行讲解,让我们在写完题目集后,明白自己还有哪些不足。

 

在自我评价上,自己努力还不够,在遇到很难的问题,时间不够就会放弃,没有专心研究。可能自己有点懒惰吧。

 

希望自己以后能克服此类问题

posted on 2023-06-23 14:10  bbbgk  阅读(39)  评论(0)    收藏  举报

导航