前三次大作业总结

目录

前言
设计与分析
踩坑心得
改进建议
总结

前言

  • 难度
    前三次大作业,总的说,对于我C语言学的不咋地的难度还是蛮大的,分开说,第一次还是很照顾新人,后面两次难度逐渐变大
  • 题量
    题量还是很友好的,没感觉到什么糟心的地方,前面几题基本不需要花时间
  • 知识点
    java的基本语法,java面向对象的思想

设计与分析

  • 第一次大作业


  • 第二次大作业


  • 第三次大作业



    1.可以看到的是第一次大作业因为比较简单,行数比较少,复杂度较低
    第二次大作业代码量到了390行,而且前期准备没有先设计好思路,也没有对类做到单一职责
    导致复杂度比较高
    第三次大作业对第二次大作业造成的错误进行了修改
    主要是将代码板块化,搞清楚了每块代码干什么
    减少了循环的滥用,也就降低了复杂度
    2.可以看到的是第一次大作业的类比较简单明了
    而第二次并没有较大的改进,这也是导致第二次大作业的代码比较不易看懂的一个主要原因
    还是没有实现类的单一原则的问题
    第三次大作业虽然有改进,但在后续还是要将Main类里面的许多功能提出来
    让思路变得更加清晰明了
    3.在后续的代码编写中我也会继续将代码板块化
    这一点可以降低复杂度,最重要的是可以帮助我将思路理顺
    实现类的单一职责

踩坑心得

三次大作业下来也是被很多问题困扰

  • 第一次大作业
    第一次大作业最大的坑就是没有处理好输入里面的一个循环
while(true)
        {
            
            dan=sc1.nextLine();
            if(dan.equals("end"))
            {
                break;
            }
            String regex="#A:";
            String []drr=dan.split(regex);
            brr[co2++].setstuawer(drr[m++].trim());
        }

这是刚开始时提交的代码

 while(true)
        {
            dan=sc1.next();
            if(dan.equals("end"))
            {
                break;
            }
            else
                l++;
            String regex="#A:";
            String []drr=dan.split(regex);
          
         
            brr[co2++].setstuawer(drr[1].trim());
            
        }

这是后面修改后的代码
看着好像没什么不同,但却让我难受了很久。
前者的输入是nextLine(),后者的输入是next()。
因为题目的输入是#A:2 #A:4,中间有空格,所以我开始是想读取一整行的。
然后又要求读取到end就结束,所以我用了一个循环,这样就导致我后面的正则表达式没有正确的读取输入的数据。
所以就换了next(),一个一个读取输入,这样也解决了end结束的问题
通过这个,我详细的学习了一下next()和nextLine()和nextInt()的区别
为什么把nextInt()放进来
因为nextInt()读完数据后要想用next()或nextLine()读取字符串
一定要再加一个next()把回车读取
而next()和nextLine()是自动读取回车
这个问题虽然简单,但却是让我停下来了很久
还有一个问题便是我在写第四题时遇到了一个致命的问题

 private int chinese=sr.resultscore(chinese1,chinese2);
    private int math=sr.resultscore(math1,math2);
    private int phy=sr.resultscore(phy1,phy2);
    private int zscore=sr.sumscore(chinese,math,phy);
    private double zaver=sr.averscore(zscore);
    private int psscore=sr.sumscore(chinese1,math1,phy1);
    private double psaver=sr.averscore(psscore);
    private int qmscore=sr.sumscore(chinese2,math2,phy2);
    private double qmaver=sr.averscore(qmscore);

这是我类里面的几行代码
当这串代码提交上去时却看到输出全是0
我以为是逻辑问题,于是一直在修改前面的赋值逻辑
后来在苦苦挣扎了许久后突然想起来,类里面只有方法和属性
也就是说类不会和main函数一样一行一行的跑
也就是说我的赋值根本就不会跑起来,所以根本没有赋值进去
也就导致了输出全是0
这次错误也是刻苦铭心
不过让我进一步体会到面向对象的思想

  • 第二次大作业
    第二次大作业加了集合进来,这个不是很大的问题
    最大的问题是写完第二次大作业后再看自己的代码的时候感觉非常的乱
    第一点就是我写完就感觉看不懂了,所以本来没有写注释习惯的我在后面写代码时写了许多的注释
 int n=0;
        int qn=0;
        int qn1=0;
        int an=0;

这是我代码中的某一段,没有注释,后面再看的时候要想很久每个变量代表了什么意思
第二点我在课上听到了老师所强调的类的单一职责
以前没有很在意类的单一职责,但这次写完代码
第一感觉就是自己的思路不清晰,以及后续修改代码很麻烦,因为每个板块涉及多个功能
这也让我对类的单一职责功能重视了起来
除去这个问题,导致我思路不清晰的问题当时还有一个便是没有提前设计好怎么写代码,而是直接上手了
后续也将这个问题给改过来了

  • 第三次大作业
    将第二次大作业的许多不正确的点给改进了
    基本实现了类的单一职责,以及提前设计好了整体的思路
    这次最大的问题便是对正则表达式的理解力不够,也就是没学好,导致后面出现了很多问题
    为此,我去网上学习了很久的正则表达式
    还有一个问题便是我的主函数太长了,在参观了同学的代码下我发现
    自己应该设计一个输入类来输入数据,不要让主函数太长,会导致思路变得不清晰

改进建议

第二,三次大作业可以设计一个数据类来存储输入进来的数据,其他的思路和老师提供的思路没有什么不同,
主要是要将java的基本语法掌握好

总结

  • 难点
    这三次大作业思路,逻辑都不难,主要难的地方是正则表达式,以及面对对象的思想对我来说
    基础的语法和一些简单的问题解决起来都不难
    难的地方在于代码量大起来后保持思路清晰
  • 我学到的
    1.在代码量大起来后,我学会了将代码放进idea中
    每写一个板块功能,便将这个板块的功能进行调试
    2.代码的板块化,以前写代码时总是将多个功能放进多一块区域中,用同一个变量来关联数据
    这样就导致了写代码时如果脑子不清晰很可能需要看很久的代码才能进行下一步
    以及在之后不好修改代码,因为涉及到的功能块很多
    在对代码板块化后修改代码不影响其他板块的功能正常进行
    3.最最重要的是现在写代码有了一颗良好的心态,认为几百行代码已经是家常便饭
    遇到问题也能自己耐心解决,再去问同学
    而不是像之前一样遇到问题便有点气馁,将解决问题的希望寄托在同学身上
posted @   yim-1  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示