第一次:
难度:类内方法不复杂,只有3种信息输入,且有类设计的提示。相对简单。
题量:需要1~2天
知识点:类设计,字符串处理等基础语法,正则表达式。
————————————————————————设计与分析——————————————————————————————————
类设计思路:
1~题目类(单个题目的信息):
属性:题目编号、题目内容、标准答案-standardAnswer
主要方法:
判题方法(答案-answer:判断答案-answer是否符合标准答案-standardAnswer)
2~试卷类(一套题目的信息)
属性:题目列表(题目类的对象集合,数组)、题目数量
主要方法:
@1判题方法(题号-num、答案-answer):判断答案-answer是否符合对应题号的题目标准答案-standardAnswer。
分析:这里判题方法进一步封装,调用题目类的判题方法
@2保存题目(题号-num、题目-question):将题目保存到题目列表中,保存位置与num要能对应
3~答卷类(用于封装答题信息)
属性:试卷(试卷类的对象)、答案列表(保存每一题的考生答案)、判题列表(保存每一题的判题结果true/false)
主要方法:判题方法(题号-num):判断答案列表中第num题的结果是否符合试卷中对应题号的题目标准答案
输出方法(题号-num):按照题目的格式要求,输出题号为num的题目的内容和答题结果。
保存一个答案(题号-num,答案-answer):保存题号为num的题目的答题结果answer。
————————————————————————踩坑心得————————————————————————————————————
两大坑:
1,数组的实例化
questions=new Questions[n];
和数组元素的实例化
for (int i = 0; i < n; i++) { //!!! 实例化数组中的每个元素
questions[i] = new Questions();
2,数组元素下标访问的越界问题:
因为题目数组questions[0]存的是第一题,所以所有对题目的操作要注意下标减一。
比如 以下对num修正
public void saveQuestion(int num,String question,String standAnswer){
num-=1;
questions[num].setNum(num);
questions[num].setQuestion(question);
questions[num].setStandAnswer(standAnswer);
}
其他:
正则表达式运用不好,可以用网上在线工具实时测试表达式是否正确(如菜鸟工具https://www.jyshare.com/front-end/854/)
————————————————————————改进建议————————————————————————————————————
因为已知题目数量,所以用数组,和变量n记录。
这里分析以后更贴近真实情况应该改用arraylist更好
第二次:
难度:4种信息输入,多次输入,无提示。不提前告诉题目的数量,乱序。中等
题量:需要3~4天
知识点:类设计,字符串处理等基础语法,正则表达式,arraylist。
————————————————————————设计与分析——————————————————————————————————
类设计思路:尝试使用list
1~题目类(Question):用于保存一道题目的信息以及处理的方法。(与系列1相同,无变化)
属性:private int num;// 题号private String content, // 题目内容standardAnswer;// 标准答案boolean matchingStandardAnswers(String answer):
主要方法:判断是否符合标准答案试卷题目类(Question _ Paper 新增): 用于保存试卷中的题目信息。
2~试卷题目类
由于试卷新增了分数,题目在不同试卷中的分值可能不一样,因此,设计试卷题目类。
属性:int p_q_ num;//试卷中题目的顺序号Question question;//题目类的对象, 保存题目信息int question _ score;// 题目分值int judge _markAnswer(String answer) // 主要方法:判断题目得分
试卷类(TestPaper):保存和处理一张试卷的信息以及处理的方法,int questionNum;// 题目数量Question[] questions;//题目清单void inputQuestion(int num, Question question): 添加一道题目void printQuestions(): 输出题目的内容~标准答案boolean markQuestion(int num, String answer): 判断第 num题的正确性。int sum-保存总分 (新增)int questionQuantity-保存题目数量 (新增)int getSum(): 获得总分 (新增)
答案类(Answer 新增):用于保存答卷中一道答案的信息。Question _ Paper question;String answer;boolean mark;// 每一题的正确性int score=0;// 每一题的得分void calScore()//
计算得分答卷类(AnswerPaper): 保存和处理一张答卷的信息以及处理的方法TestPaper paper;//试卷信息String[] answers;//每一题的答案信息boolean[] marks;//每一题的判题结果 (对/错)(去除)void printQ_A(int num): 输出第 num 题的题目和答案(卷面答案, 非标准答案)boolean getJudge(int num): 获得第 num题的判题结果void printJudges() : // 输出所有的得分以及总分, 以空格分隔(新增)
尝试使用list
class Papers {
// private List
// class AnswerPapers {
// private int paperNum; // 试卷编号
// private List
// private int totalScore; // 总分
// private List
————————————————————————踩坑————————————————————————————————————
未协调好时间,错误评估了难度。
不会检验写到一半的代码,没有正反馈。
第三次:
————————————————————————设计与分析——————————————————————————————————
难度:6种信息输入,多次输入,不提前告诉题目的数量,乱序。多了很多错误输入。
题量:需要4~5天
知识点:类设计,字符串处理等基础语法,正则表达式,arraylist,hashmap。
类设计:(部分采纳老师建议)
涉及的类题目类(Question):用于保存一道题目的信息以及处理的方法。(与系列1相同,无变化)private int num;// 题号private String content, // 题目内容standardAnswer;// 标准答案boolean matchingStandardAnswers(String answer): 判断是否符合标准答案(新增) boolean isValid=true;//是否是有效的题目(新增) void disabled() //当题目被删除, 设置题目为失效状态(新增) ArrayList
记录所有引用了该题目的答案试卷题目类(Question _ Paper): 用于保存试卷中的题目信息。由于试卷中的题目序号与题目本身的题号不一致。且题目在不同试卷中的分值可能不一样,因此,设计试卷题目类。int p_q_ num;//试卷中题目的顺序号Question question;//题目类的对象, 保存题目信息int question _ score;// 题目分值int judge _markAnswer(String answer) //
判断题目得分试卷类(TestPaper):保存和处理一张试卷的信息以及处理的方法,int questionNum;// 题目数量HashMap<String, Question _ Paper> questions;//题目清单void inputQuestion(int num, Question question): 添加一道题目void printQuestions(): 输出题目的内容~标准答案boolean markQuestion(int num, String answer): 判断第 num题的正确性。int sum-保存总分int questionQuantity-保存题目数量int getSum(): 获得总分答案类(Answer):用于保存答卷中一道答案的信息。Question _ Paper question;String answer;boolean mark;// 每一题的正确性int score=0;// 每一题的得分void calScore()//计算得分(新增) void disable() //
答案对应的题目失效, 判分为0答卷类(AnswerPaper): 保存和处理一张答卷的信息以及处理的方法TestPaper paper;//试卷信息String[] answers;//每一题的答案信息boolean[] marks;//每一题的判题结果 (对/错)void printQ_A(int num): 输出第 num题的题目和答案(卷面答案, 非标准答案)boolean getJudge(int num): 获得第 num题的判题结果void printJudges() : // 输出所有的得分以及总分, 以空格分隔(新增) String stuNum;// 学号(新增) void printErrorNumQuestion(Answer answer) // 输出试卷中错误题目号的题目
我的类设计可视化 ,以下:
class Questions{
public Questions() {
private int num;
private String question;
private String standardAnswer;
//判题
public boolean judgeMethodOfQuestions(String answer){
if(answer.equals(standardAnswer))
return true;
else return false;
}
}
class Q_Paper{
private int num;
private Questions question;
private int fullScore;
//
public boolean judgeMethodOfQ_Paper(String answer){
}
}
class Papers{
//试卷编号
private int Papernum;
//试卷顺序题目编号
private static int num=1;
//与答卷答案顺序对应
private ArrayList<Q_Paper> questions = new ArrayList<>();
//加题
public void addQuestionsToPaper(Q_Paper question) {
questions.add(question);
}
}
class Students{
private String num;
private String name;
}
class Answers{
//试卷题目类
private Q_Paper question;
//考生答案
private String answer;
//正确性
boolean mark;
//得分
int score=0;
public void judgeMethodOfAnswers(String answer) {
}
class AnswerPapers
{
//对应试卷
private Papers paper;
//对应试卷编号
private int forPaperNum;
//学生编号
private String stuNum;
//考生答案对象集
private Answers answers[];
//输出问题和卷面答案结果
public void printQ_A(){}}
————————————————————————踩坑心得————————————————————————————————————
对hashmap不熟练运用
花时间不够
————————————————————————改进建议————————————————————————————————————
重视,重拾,重写修改。
~
——————————————————————————总结————————————————————————————————————————
1·学到了正则表达式的运用,类设计方法,java的封装思想,面向对象编程的思想等。
2·我反思检讨自己需要端正态度,认真学习,认真java编程。
我建议,希望能在每一次大作业结束后可以发一次补集,补集可以不算入成绩,但是这样一来我们能修改调试,或者老师讲解后新的想法的实现,修改。这样可以提升能力。