首页 > 其他分享 >题目集 1 - 3 总结性 Blog

题目集 1 - 3 总结性 Blog

时间:2024-10-26 17:42:45浏览次数:10  
标签:问题 总结性 题目 int 试卷 number Blog 答案

一、前言
在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。
(一)知识点概述
题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据和行为,以及如何通过对象之间的交互来实现特定的功能。
题目集 2 在题目集 1 的基础上,进一步深入了面向对象编程的概念,同时引入了数据结构的使用。我们学会了如何使用列表(List)和映射(Map)等数据结构来存储和管理数据,提高了程序的效率和可维护性。
题目集 3 则更加注重综合能力的考查,涵盖了面向对象编程、数据结构、异常处理等多个方面的知识。我们学会了如何处理复杂的业务逻辑,以及如何进行代码的优化和改进。
(二)题量分析
题目集 1 的题量相对较少,主要集中在实现一个简单的考试系统,包括问题的添加、用户答案的存储和结果的检查等功能。
题目集 2 的题量有所增加,除了实现试卷的创建、问题的添加和答案的检查等功能外,还需要检查试卷总分是否为 100 分,以及输出每个学生的得分情况。
题目集 3 的题量最大,除了包含题目集 2 的所有功能外,还增加了学生学号和姓名的管理、格式错误检查以及被删除题目的处理等功能。
(三)难度分析
题目集 1 的难度相对较低,主要涉及 Java 的面向对象编程基础,对于有一定编程基础的学生来说比较容易上手。
题目集 2 的难度有所增加,需要学生掌握更多的面向对象编程概念和数据结构的使用方法。同时,还需要学生具备一定的问题分析和解决能力,才能正确地实现试卷的创建、问题的添加和答案的检查等功能。
题目集 3 的难度最大,需要学生综合运用所学的知识,包括面向对象编程、数据结构、异常处理等,才能正确地实现程序的所有功能。同时,还需要学生具备较强的问题分析和解决能力,以及良好的编程习惯和代码规范意识。
二、设计与分析
(一)题目集 1 的设计与分析
整体架构:题目集 1 实现了一个简单的考试系统,由Inquiry、ExaminationSystem和ResponseSheet三个主要类组成。Inquiry类代表问题,包含问题编号、内容描述和标准响应值等属性。ExaminationSystem类负责管理问题集,提供添加问题、检查答案和获取问题等方法。ResponseSheet类用于处理用户的答案,包括存储答案、检查答案和打印最终结果等功能。
类图

顺图

代码分析:
以Inquiry类为例,其构造函数public Inquiry(int identificationNumber, String contentDescription, String standardResponseValue) { this.identificationNumber = identificationNumber; this.contentDescription = contentDescription; this.standardResponseValue = standardResponseValue; }清晰地初始化了问题的各个属性。
ExaminationSystem类中的addQuestion方法,public void addQuestion(int number, String questionText, String answer) { questionSet.put(number, new Inquiry(number, questionText, answer)); }将问题添加到问题集中,利用了HashMap的数据结构来高效存储问题。
ResponseSheet类的checkAnswerForGivenNumber方法,public boolean checkAnswerForGivenNumber(int number) { Inquiry question = exam.getQuestionByNumber(number); if (question!= null) { boolean result = question.verifyUserResponse(userResponses.get(number)); resultStatuses.put(number, result); return result; } return false; }实现了检查特定问题答案的功能,通过调用其他类的方法进行协同工作。
(二)题目集 2 的设计与分析
整体架构:题目集 2 进一步扩展了考试系统,增加了试卷的概念。由Question、TestPaper和Answer三个类组成。Question类表示问题,TestPaper类代表试卷,包含试卷编号、问题顺序和问题分数等信息。Answer类用于存储学生的答案。
类图

顺序图

代码分析:
TestPaper类的addQuestion方法,public void addQuestion(int questionNumber, int score) { questionOrder.add(questionNumber); questionsAndScores.put(questionNumber, score); totalScore += score; }不仅将问题添加到试卷中,还动态更新了试卷的总分。
Answer类的addAnswer方法,public void addAnswer(String answer) { answers.add(answer.trim()); }将学生的答案添加到答案列表中,并去除了答案中的前导和尾随空格,提高了数据的准确性。
(三)题目集 3 的设计与分析
类图

顺序图

(一)整体架构
题目集 3 的代码实现了一个较为复杂的考试系统,包括问题的管理、试卷的创建、学生答案的处理以及各种错误情况的检查和处理。主要涉及以下几个类:
Question:表示问题,包含问题编号、内容和答案等属性。
TestPaper:代表试卷,包含试卷编号、问题顺序、问题和分数的映射以及总分等属性。
Answer:用于存储学生的答案,包括试卷编号、学生学号和每个问题的答案映射。
Main:程序的入口点,负责读取输入、处理数据和输出结果。
(二)代码详解
Question类
代码示例:
class Question {
int number;
String content;
String answer;

public Question(int number, String content, String answer) {
    this.number = number;
    this.content = content;
    this.answer = answer.trim();
}

}
分析:这个类非常简洁,定义了三个属性分别表示问题的编号、内容和答案。构造函数用于初始化这些属性,其中对答案进行了去除前导和尾随空格的处理,确保答案的准确性。例如,如果答案是 "answer",经过处理后变为 "answer"。
TestPaper类
代码示例:
class TestPaper {
int number;
List questionOrder;
Map<Integer, Integer> questionsAndScores;
int totalScore;

public TestPaper(int number) {
    this.number = number;
    questionOrder = new ArrayList<>();
    questionsAndScores = new HashMap<>();
    this.totalScore = 0;
}

public void addQuestion(int questionNumber, int score) {
    questionOrder.add(questionNumber);
    questionsAndScores.put(questionNumber, score);
    totalScore += score;
}

public int getTotalScore() {
    return totalScore;
}

}
分析:
属性部分:
number表示试卷编号,用于唯一标识一份试卷。
questionOrder是一个列表,用于保存试卷中问题的顺序,按照添加问题的顺序存储问题编号。
questionsAndScores是一个映射,将问题编号与该问题的分数对应起来,方便快速查找特定问题的分数。
totalScore表示试卷的总分,初始值为 0,在添加问题时动态计算更新。
构造函数:初始化试卷编号和相关的数据结构,为后续的问题添加和分数管理做准备。
addQuestion(int questionNumber, int score)方法:将问题编号添加到questionOrder列表中,同时将问题编号和对应的分数存入questionsAndScores映射中,并更新总分。例如,添加一个问题编号为 1,分数为 10 的问题,会将 1 添加到questionOrder,在questionsAndScores中存入键值对 (1, 10),并将总分增加 10。
getTotalScore()方法:简单地返回试卷的总分,方便在其他地方获取试卷总分进行检查和输出。
Answer类
代码示例:
class Answer {
int testPaperNumber;
String studentId;
Map<Integer, String> answers;

public Answer(int testPaperNumber, String studentId) {
    this.testPaperNumber = testPaperNumber;
    this.studentId = studentId;
    answers = new HashMap<>();
}

public void addAnswer(String input) {
    String[] parts = input.split("-");
    int questionNumber = Integer.parseInt(parts[0]);
    String answer = parts[1].trim();
    answers.put(questionNumber, answer);
}

}
分析:
属性部分:
testPaperNumber表示该答案所属的试卷编号,用于关联答案和特定的试卷。
studentId是学生的学号,用于标识回答该试卷的学生。
answers是一个映射,将问题编号与学生对该问题的答案对应起来,方便快速查找特定问题的学生答案。
构造函数:传入试卷编号和学生学号,初始化答案对象,并创建用于存储答案的映射。
addAnswer(String input)方法:解析输入字符串,通过split("-")方法将字符串按照 "-" 分割成两部分,第一部分是问题编号,转换为整数类型;第二部分是答案内容,去除前导和尾随空格后存入映射中。例如,输入 "1-answer",会将问题编号 1 和答案 "answer" 存入映射中。
三、采坑心得
(一)题目集 1 的采坑心得
问题描述:在实现题目集 1 的过程中,遇到了如何正确地验证用户答案的问题。一开始直接比较用户答案和标准响应值的字符串,发现会出现大小写不敏感的问题。
解决方法:通过查阅资料,使用equalsIgnoreCase()方法进行大小写不敏感的比较,解决了这个问题。
心得与体会:遇到问题要保持冷静,仔细分析原因,通过查阅资料和调试代码来解决问题。同时,要养成良好的编程习惯,提高代码的可读性和可维护性。
(二)题目集 2 的采坑心得
问题描述:在实现题目集 2 的过程中,如何正确地检查试卷总分是否为 100 分成为了一个难题。一开始直接在addQuestion方法中累加每个问题的分数,然后在getTotalScore方法中返回总分,但是发现如果一个问题被添加了多次,总分就会不正确。
解决方法:在addQuestion方法中先判断问题是否已经存在,如果存在则不添加,否则才添加。同时,在getTotalScore方法中重新计算总分,而不是直接返回累加的结果。
心得与体会:要仔细分析问题的需求,设计合理的算法和数据结构来解决问题。进行充分的测试,确保代码的正确性和稳定性。
(三)题目集 3 的采坑心得
问题描述:在实现题目集 3 的过程中,如何正确地处理格式错误是一个挑战。一开始只是简单地输出错误信息,导致程序的可读性和可维护性很差。后来使用异常处理机制,将格式错误作为异常抛出,但还是会出现一些问题,比如如果一个输入行包含多个格式错误,只会抛出第一个错误,而忽略其他错误。
解决方法:在main方法中使用一个循环来逐个检查输入行的格式,如果发现格式错误,则输出错误信息,并继续检查下一行。同时,在异常处理中添加更多的信息,比如错误的行号和错误的内容,以便更好地定位和解决问题。
心得与体会:要充分考虑各种可能的情况,进行全面的测试和调试。学会使用异常处理机制,提高代码的健壮性和可靠性。
四、改进建议
(一)题目集 1 的改进建议
代码优化:在题目集 1 的代码中,可以对一些方法进行优化,比如在verifyUserResponse方法中,可以使用正则表达式来进行更灵活的验证。同时,也可以对ResponseSheet类的printFinalResults方法进行优化,使用更简洁的方式来输出结果。
功能扩展:可以在题目集 1 的基础上进行功能扩展,比如增加问题的分类、难度等级等属性,以及根据不同的分类和难度等级进行问题的筛选和排序等功能。
用户界面:可以为题目集 1 的考试系统添加一个用户界面,使用户可以更加方便地进行操作和查看结果。比如可以使用图形用户界面(GUI)或者命令行界面(CLI)来实现用户界面。
(二)题目集 2 的改进建议
代码优化:在题目集 2 的代码中,可以对一些方法进行优化,比如在TestPaper类的addQuestion方法中,可以使用Set来存储问题编号,避免重复添加问题。同时,也可以对Answer类的addAnswer方法进行优化,使用更高效的方式来存储学生答案。
功能扩展:可以在题目集 2 的基础上进行功能扩展,比如增加试卷的类型、考试时间等属性,以及根据不同的类型和时间进行试卷的生成和管理等功能。
数据存储:可以将题目集 2 的数据存储到文件或者数据库中,以便长期保存和管理。同时,也可以使用文件或者数据库来实现数据的备份和恢复等功能。
(三)题目集 3 的改进建议
代码优化:在题目集 3 的代码中,可以对一些方法进行优化,比如在Main类的main方法中,可以使用更高效的方式来读取输入和处理数据。同时,也可以对Answer类的addAnswer方法进行优化,使用更简洁的方式来存储学生答案。
功能扩展:可以在题目集 3 的基础上进行功能扩展,比如增加学生的成绩统计、排名等功能,以及根据不同的条件进行成绩的查询和分析等功能。
五、总结
通过这三次题目集的挑战,我学到了很多知识和技能。在面向对象编程方面,我学会了如何定义类、创建对象和调用方法,以及如何使用封装、继承和多态等面向对象编程的特性。在数据结构方面,我学会了如何使用ArrayList、HashMap和Set等数据结构来存储和管理数据,提高了程序的效率和可维护性。在问题分析和解决方面,我学会了如何分析问题的需求,设计合理的算法和数据结构来解决问题,以及如何进行充分的测试和调试,确保代码的正确性和稳定性。
同时,我也认识到了自己在编程方面的不足之处。比如,我的编程习惯还不够好,代码的可读性和可维护性还有待提高。我的问题分析和解决能力还不够强,有时候需要花费很长时间才能找到问题的根源。我的代码优化和改进能力还不够高,有时候不能想出更好的算法和数据结构来提高程序的效率和性能。
在今后的学习和实践中,我将更加努力地学习编程知识和技能,提高自己的编程水平。我将养成良好的编程习惯,提高代码的可读性和可维护性。我将加强问题分析和解决能力的训练,提高自己的问题分析和解决能力。我将不断地进行代码的优化和改进,提高程序的效率和性能。
对于教师、课程、作业、实验、课上及课下组织方式等方面,我也有一些建议和意见。比如,教师可以在课堂上多讲解一些实际的编程案例,让我们更好地理解编程的应用场景和方法。课程可以增加一些编程实践的环节,让我们有更多的机会进行编程练习和项目开发。作业可以更加多样化,包括编程作业、报告作业和小组作业等,提高我们的综合能力。实验可以更加注重实践操作和问题解决,让我们更好地掌握编程技能和方法。课上及课下组织方式可以更加灵活,比如采用小组讨论、项目展示等方式,提高我们的学习积极性和参与度。
总之,通过这三次题目集的挑战,我收获了很多,也认识到了自己的不足之处。在今后的学习和实践中,我将不断地努力,提高自己的编程水平和综合能力。

标签:问题,总结性,题目,int,试卷,number,Blog,答案
From: https://www.cnblogs.com/liuwei7312/p/18504281

相关文章

  • 题目集1~3的总结性Blog
    前言在完成这三次题目集后,我也有了一些心得和体会。关于题目集1,它有5道题,分别是7-1:设计一个风扇Fan类;7-2:类和对象的使用;7-3:成绩计算-1-类、数组的基本运用;7-4:成绩计算-2-关联类;7-5:答题判题程序-1。在完成题目7-1时,我通过设计一个风扇类,了解了类的基本结构,对类的属性和方法......
  • My_Blog1_第一次
    一、前言第一次大作业7-5答题判题程序-1知识点这是设计的第一个答题判题程序,要求我们模拟一个小型测试。程序输入包括题目数量、题目内容和答题信息,输出题目内容、答题结果和判题信息。其主要的知识点是题目类封装题目编号、内容和标准答案;试卷类管理题目列表和判题;答卷类记......
  • 答题判题程序1~3总结性Blog
    前言:总结三次题目集的知识点、题量、难度等情况答题判题程序11.知识点输入输出处理:解析输入格式,包括题目数量、题目信息和答题信息。按行处理输入内容,确保题目顺序和编号的独立性。字符串解析与匹配:需要识别并提取指定格式中的题号、题目内容、标准答案和用户作答答案。按......
  • 南昌航空大学 22207208-贺凯凯 第一次总结性Blog
    一,前言本项目中我们实现了一个模拟在线答题判分的程序,分为三次迭代,逐步扩展功能和复杂度。通过三次题目集的练习,我们从基本的答题判分系统开始,逐渐加入了多试卷、多学生、多题目管理等元素,最终形成一个多功能、多用户的答题管理系统。每个题目集中涉及的知识点包括输入处理、字符......
  • Java 题目集总结
    一、前言在本次Java课程的学习中,我们通过完成三次精心设计的题目集,深入探索了Java编程的广阔世界。这三次题目集犹如攀登知识高峰的阶梯,每一次都引领我们迈向更高的层次,涵盖了从基础概念到复杂应用的多个重要知识点,为我们提供了宝贵的实践机会,使我们在编程的道路上不断成长和......
  • OO_PTA题目集1-3总结
    (1)前言前三次作业算是让我走上了写JAVA的正轨,题目小多,难度还可。初步学会了如何去写了类。题目内容主要涉及无参有参构造,排序查找,类的设计,常用系统类方法的使用等等,以及主要的答题判题程序的编写与迭代。在这三次作业里也算是初窥门槛了罢。(2)设计与分析第一次作业答题判题程序......
  • JAVA-PTA题目集总结
    一、 前言    经过Java题目集1-3的练习,我对Java编程有了更加深入的理解和掌握。题目集涵盖了Java基础语法、面向对象编程、集合框架等多个方面,题量适中,难度逐步上升,让我在挑战中不断成长。    三次训练的知识点涉及Java的基本语法,包括变量、数据类型、运算符、......
  • BLOG-1
    前言回顾这三次作业的心路历程,可以说每一次都带来了新的挑战与收获,随着题目数量和复杂度的增加,对Java编程的理解和面向对象设计的认知逐步加深。作为Java编程初学者,最初对编程架构、模块分层和错误处理的认识相对浅显,但通过这三次作业,从题目处理到答案判定再到错误信息提示,逐步体......
  • BLOG-1
    pta1-3次大作业博客总结一、前言​ 在前三次的PTA大作业中,我们依次完成了答题判题程序1至3。这三个程序彼此紧密相连,层层递进,每一次的完成都是在前一次基础上的持续修改、完善与优化。这三次大作业的顺利进行要求我们对类、Map、List、正则表达式等知识点有深入的理解与熟练的......
  • [USACO1.2] 方块转换 Transformations 题目解析
    洛谷P1205[USACO1.2]方块转换Transformations题目解析题目描述一块n×nn\timesnn×n正方形的黑白瓦......