首页 > 编程语言 >OOP面向对象编程三次题目总结

OOP面向对象编程三次题目总结

时间:2024-04-21 16:33:05浏览次数:26  
标签:输出 题目 答卷 试卷 信息 OOP 面向对象编程 输入

一.前言:
在这三次题目集中,最后一小题为判题程序,其余题为基础的知识点题,输入一段题目内容,试卷内容,答卷内容,评判对错情况和计算最终总分,在这三次作业的迭代下,我一次比一次做的不好,第一次是满分,第
二次95,第三次只有79,即使效果不好,我还是把我的做题思路写下来供大家参考。
二.三次作业设计与分析:
第一次
知识点:类的应用,类与类之间的关系,题量:5,难度:中等
要求实现一个判题程序,输入题号,题目,和答卷,根据题目后面接着的标准答案和给出的答卷的提交答案进行比较,最终输出答题情况和对错。总体比较简单,通过主函数输入信息,进行存储题目信息在试卷类,

我有一点未作完善,我的试卷类只能存储一个题目,答卷类是比较试卷类中的那一道题目和标准答案的正确情况,输出最后的格式。这一次的题目虽然简单,但是对后面的迭代有着比较重大的意义,每次一都是在这
一次的基础下进行修改。****
类图:

耦合度:

第一次作业比较简单,考虑的情况也比较少。
第二次
知识点:类的应用,类与类之间的关系,ArrayList的使用,题量:4,难度:稍难
要求实现一个更加完善的判题程序,这一次相比于上一次的难点在于,要求输入内容有题目信息和标准答案,试卷题目和对应的分数,答题信息,在上一次的基础上迭代,题目稍微难,这一次我稍作修改,根据在主
函数输入的信息中识别内容,进行相应位置的存储,一张试卷存放着该试卷的全部题目,一张答卷存放着对应试卷号和该试卷题目的提交答案,进行一一比较了,输出格式也稍微有所改动,首先输出该试卷总分是否
为100分,其次依次输出试卷的答题情况和总分,如果答案信息中试卷的编号找不到,则输出”the test paper number does not exist”,如果输入的答案信息少于试卷的题目数量,答案的题目要输"answer is
null"。最后我通过修改,任然有一个测试点未通过
类图:

耦合度:

这次作业类的关系相比于上一次更为复杂
第三次
知识点:类的应用,类与类之间的关系,ArrayList的使用,题量:3,难度:困难
在第二次的基础上加以迭代,实现一个更加完美的判题程序,要求输入内容有题目信息和标准答案,试卷题目和对应的分数,答题信息,以及学生信息,题目稍难,这一次我基于第二次的方法,依旧使用ArrayLst,
在主函数中输入信息并识别,另加了一个小功能,就是可实现对题库中的题目进行删除功能,接着要判断输入信息是否合法,并输出相应提示,接着进行相应位置的存储,一张试卷存放着该试卷的全部题目,一张答
卷存放着对应试卷号和该试卷题目的提交答案,进行一一比较,输出格式与第二次相差不大,首先输出那部分格式错误,再而输出该试卷总分是否为100分,不同就是在输出得分前加上该答卷的学生学号和姓名,删
除题目信息为独行输入,每一行为一条删除信息,多条删除信息可分多行输入。该信息用于删除一道题目信息,题目被删除之后,引用该题目的试卷依然有效,但被删除的题目将以0分计,同时在输出答案时,题目
内容与答案改为一条失效提示,例如:”the question 2 invalid~0”,试卷错误地引用了一道不存在题号的试题,在输出学生答案时,提示”non-existent question~”加答案,输入信息只要不符合格式要求,
均输出”wrong format:”+信息内容,如果答卷信息中试卷的编号找不到,则输出”the test paper number does not exist”,答卷中的答案不用输出,但最终还有奖金五个测试点未通过
类图:

耦合度:

这一次比较难,类的个数也比较多,关系也复杂
三.踩坑心得:
一.第一次大作业我是输入一个识别一个,当时这个方法是可行的,到了第二次我的脑子任然是想着这个方法,但是后面写着写着看到了题目说了一句话:输入顺序不确定,我便放弃了这样的解决方式,后面我的解决方法是将内容一次性以一行一行的字符串输入存入到一个字符串数组中,再后来我将输入的内容存入到了元素为String的ArrayList里面,下面是我的展示:
第一次:

第二次:

第三次:

二.就是第三次作业的判断输入的内容是否合法,我的做法是先切分后使用用正则表达式,这里不做过多讲解,举出一例当作样例即可:
这是一个判断输入的题目是否合法的代码:

测试结果如下,
输入:
#N:1 #Q:1+1= #:2(本应该为#N:1 #Q:1+1= #A:2)
#T:1 1-5
#X:20201103 Tom
#S:1 20201103 #A:1-5
end
输出:

三.类似于输入试卷信息的格式,有很多部分是格式相同的,例如:#T:1 1-5 2-8,除了#T:之外,都是"题号-分数"的格式,这个判断格式是否正确的放我我也做了思考,我不知道我的是否为最优解,所以我也打算拿
出那展示,后面看看同学的是否有更优解,加以学习。
这是一段判断输入试卷是否合法的代码:
//输入试卷
for(int k=0;k<content.size();k++){
for(i=0;i<content.size();i++) {
if (content.get(i).startsWith("#T:")){
String[] parts = content.get(i).split("\s+");
j++;
int Paper_num = Integer.parseInt(parts[0].substring(3));
if(Paper_num == j){
Paper paper = new Paper(Paper_num);

                    int flag1=1;
                    for (int l = 1; l < parts.length; l++) {
                        String regex = "^\\d+-\\d+";
                        Pattern pattern = Pattern.compile(regex);
                        Matcher matcher = pattern.matcher(parts[l]);
                        if(!matcher.matches()){
                            System.out.println("wrong format:" + content.get(i));
                            flag1=0;
                            break;
                        }
                    }
                    if (flag1==1) {
                        for (int l = 1; l < parts.length; l++) {
                            String[] questionPart = parts[l].split("-");
                            int questionNumber = Integer.parseInt(questionPart[0]);
                            int flag=0;
                            for(int x = 0;x<questions.size();x++){
                                if(questions.get(x).getNum() ==questionNumber){
                                    flag=1;
                                    paper.addQuestions(questions.get(x));
                                    break;
                                }
                            }
                            if(flag==0){
                                paper.addQuestions(new Question(0,questionNumber,null,null));
                            }
                            int score = Integer.parseInt(questionPart[1]);
                            paper.addQuestionScore(score);
                        }
                        papers.add(paper);
                    }
                }
            }
        }
    }

测试结果如下:
输入:
#N:1 #Q:1+1= #A:2
#N:2 #Q:2+2= #A:4
#T:1 1-5 3~8(正确格式为:#T:1 1-5 3-8)
#X:20201103 Tom-20201104 Jack-20201105 Www
#S:1 20201103 #A:1-5 #A:2-4
#D:N-2
end
输出:

四.改进建议
我的建议是我在我的类的内容进行改进,题目类有题目类的方法,试卷类哟试卷类的方法,答卷类有答卷类的方法,试卷类还是存放这相应的题目,答卷类存放对应试卷的题目编号和学生写的答案,其内部有判题方法对答案进行判断是否正确,更加完善单一职责,在原来的题目基础上进行深一步的迭代。
五。总结:
在三次大作下来,我也学到了很多知识,明白了我们软件工程不容易,既来之则安之,我也要更加努力学习,通过一次次的作业不断提升自我。在本次阶段的大作业,我一次一次对代码进行改善,当然也是一次一次的学习,找出最优的解决方法,
建议和意见:
一.题目:对不友好的一点我觉得就是测试点问题,我们都知道未来遇到很多问题可能并不会给出我们问题所在,也不会明确告诉我们测试点,提交答案的提示很多测试点都是一样的提示,很多同学在测了很久很久才写
出来,甚至可能都还没写出,但这并不是我们不会,也不是因为题目很难,也不是因为我们实现不了哪些功能,而是测试点都是出题方的主观因素,导致我们并没有想法往那个方向思考,我们也不是顶尖985,就是普
通一本,我也相信学院在接下来的培养我们,我们也能更加进一步提升自身能力和水平。
二.课程,实验等方面:
对学校的教学方式很满意,学生通过课前看发布的视频,先一步了解,提升了我们的自学能力(很重要),实验课也能帮助我们解决心中的问题,教师也很好,有的同学因为学习能力偏差,在大作业稍微有点吃力,老
师能很认真的和他们交谈,我觉得很好,在课上和课下,老师很认真的讲课,出一些课堂练习给我们当场练习,然后讲解,也会对大作业进行讲解,课后也会认真在QQ给我们解答问题。
自我加以改进:
1.对自己出现的bug加以分析其原因,在写代码之前分析好类关系图。
2.学习新知识,简化代码,完善单一职责
3.对前三次的未通过的测试点加以分析,在下一次攻克难题

标签:输出,题目,答卷,试卷,信息,OOP,面向对象编程,输入
From: https://www.cnblogs.com/oop-blog/p/18145373

相关文章

  • PTA前三次题目集总结
    PTA前三次题目集总结1.前言:2.设计与分析3.踩坑心得4.改进建议5.总结1.前言:  1.前三次题目集的重心从对类的使用和设计,类的关系,到类的封装。第一次题目集题目较多,主要是为了让作为初学者的我们能掌握Java的基本操作。第二次题目集题量适中,但增加了使用链表,自定义类要实现......
  • 题目集1-3总结
    前言设计与分析踩坑心得踩坑心得改进建议总结前言知识点每次题目集在小题上都能给出新的知识去让我们学习,包括类的构造,类的引用,数组的基本运用,对象的构造,更包括对属性状态的应用,尽管以我们现在的水平还无法真正理解到属性的状态对程序乃至工程整体的作......
  • 第一次OOPBlog
    PTA也写过了三次作业了,虽然很遗憾都没有拿到满分,不过在练习的过程中也很直观的学到了一点:做题不能因为不会就轻易放弃,要学会钻研。借着这次机会,好好的和之前的自己“算个帐”。首先是第一次作业中:1.涉及到了对象的包装,即面向对象的程序的三大技术之一,如:设计一个风扇类:点击查......
  • nchu-oop训练集1~3总结
    一、前言Java学习已经有一个多月了,虽然还是有些困难,但已不像初学C语言时那般吃力,Java是一门非常强大且有趣的编程语言。我喜欢Java的面向对象的特性,它让我可以更好地组织和管理我的代码。另外,Java的跨平台性也让我感到很方便,我可以在不同的操作系统上运行我的程序。这三次题目集......
  • PTA三次题目集总结性Blog
    (1)前言1.第一次题目集知识点主要涉及类的设计和实现、构造方法的使用、成员变量和访问器/修改器的定义、方法的重写(toString方法)、对象的创建和调用方法、控制台输入和输出的使用、浮点数的格式化输出等,题量比较适中,难度也比较适中,要求实现的功能较为基础,但需要一定的类设计和方......
  • OOP课程第一次博客
    目录1.前言2.设计与分析1.第一次pta作业2.第二次pta作业3.第三次pta作业3.踩坑心得4.改进建议5.总结1.前言前三次pta题目集的最后一题主要是实现一个模拟小型测试的答题判题程序,第二次题目集在第一次的基础上新增了一个答卷类,第三次题目集在第二次题目集上新增了一个学生类并且......
  • 关于发布题目集1~3的总结性Blog
    前言:这几次关于答题判题程序是通过从键盘中输入提取出对应的信息(比如说题目,试卷,答卷等等)然后再进行逐一判断。从中考查的知识点是正则表达式的运用,加上了split函数的运用,类的数组运用等等。主要的还是这三点。由于一直的迭代,导致最终它的题目要求越来越多,导致难度直线上升。也从8......
  • 题目集1~3的总结性Blog
    一、前言第一次题集知识点主要是掌握类和对象的使用创建,以及类与类之间的关系,还有正则表达式的运用,动态数组ArrayList类的使用,以及方法。这一次的题集难度不是很大,因为是第一次所以来说题量有点大。也是艰难完成了。第二次题集知识点与第一次的类似主要还是对正则表达式的使......
  • OOP课程·PTA题目集1-3总结
    一.前言第一次pta比较简单,主要考察了类的关联与依赖,只有一道大题与4个小题第二次pta比较难,主要考察了类设计,有一道大题与3个小题第三次pta较难,主要考察了类设计,日期类的基本使用,有2个小题与1个大题二.设计与分析第一次题目集7-1设计一个风扇Fan类源码:点击查看代码......
  • 数据类型和表达式题目
    题目一求下列公式近似值题目二阿姆斯特朗数 也就是俗称的 水仙花数 ,是指一个三位数,其各位数字的立方和等于该数本身。例如:153=13+53+33,所以153就是一个 水仙花数 。求出1~1000之间所有的 水仙花数 。补充%d就是普通的输出了%2d是将数字按宽度为2,右对齐方式输出......