三次大作业总结
一.分析与总结
这三次大作业我完成的情况并不好,整体得分情况都很差劲,甚至离及格都相差好远,总结反思之后,发现在我的学习代码的过程中存在诸多问题。在习题结束后,我深刻总结了代码得分情况不尽人意的原因,并且在和同学的交流过程中,得到了新的理解和体会,为弥补之前所学知识的漏洞,巩固所学知识,更好进行下一阶段的学习,对前三次大作业出现的问题做出以下总结:
1.第一次大作业
第一次作业是设计。实现答题程序,模拟一个小型的测试。第一次很简单,只用到了三个类,题目类,试卷类,答卷类,整体思路是通过一排排输入,即input.nextLine()来输入,每一行就相当于是一个类,当检测到哪一行字符串是“end”得时候就结束。由于第一次大作业很简单,没有错误格式得测试,并且第一行还输入要输入几个题目得数字,即将每行代码用split拆分一下,再分别将拆分出来得数据存入类里,最后再遍历题目和答案,看是否相同,相同输出true,不相同输出false。由于第一次大作业很简单,所以只用了100多行代码就解决了。
2.第二次大作业
第二次大作业同样是答卷类作业,但是多了一个分数类,即每一题赋予了一个分值,判断每一题对错得时候要给每一题得得分赋分,最后输出,在这里我用了一个sco数组去存储每一题得分数,最后用循环printf出每一题得分数,总分则用totalsco分别加上对的题目的分数。另外分数类答卷不止一个这里要加一个循环。还要考虑answer is null的情况,即答案比题目少的情况,如果这个题目没有匹配到对应的答案,则输出answer is null。这里我用了一个整型n,每循环一次赋分的map就加一,然后每次都和answer类MAP的size做对比,当对应的题目没有answer时,其对应的size,即n就会大于answer的size,即后面都输出answer is null。
3.第三次大作业
第三次大作业难度更大了,主要是复杂程度大大增加。不仅新加了两个类,一个学生信息类,一个删除类,而且考虑的情况也更多了,比如增加了wrong format的输入,这里就要求要用到正则表达式去检验格式,并且每一行的输入情况可能有多种,就比如答卷类,它可能是wrong format 也可能是answer is null 所以我用了两个正则表达式去检验两种情况,先检验是不是answer is null,再检验是不是wrong format,其他类一样,都要用到相应的正则表达式,而且这次的正则表达式的运用与前面大不相同,属于是天差地别,为此我特意去网上搜索查询并且不停的询问自己的室友,最后才确定了每个类的正则表达式。这是难点1。难点2就是要想到遍历的顺序,从哪开始遍历,我的设计思路是先从赋分类开始遍历,即#T:类开始,先遍历问题类,即#N:类,再遍历#S:类,即答卷类,它的难点在于每一题有四种情况,即“answer is null”,“题目不存在”,“题目被删除”,“题目true or false”,这四种情况有优先级,并且还要设计一个比较复杂的算法去判断,当判断到优先级最高的则continue,直接把后面的判断省去。最后的输出我也是用一个数组sco去记录每一题的得分,用循环输出出来,并且在算法判断的时候我用了一个类去实现所有的计算功能,并在这个类里开了所有类的数组用来遍历,把这些类分别放到对应的数组里。来依次遍历。还有一点就是用到map的遍历。对应的题号与分值存入map,对应的题号与答案存入map,到第三次作业我就用了400行代码。
总结:因为是第一次写大作业集,所以感觉老师布置的作业难度是不大的,所以总是以一种漫不经心的态度来对待这些作业,大作业发布后总是拖拉,开始写代码的时间总是一拖再拖,导致在完成作业时时间紧张,再加上对所学内容的掌握也并不熟练,在运用过程中问题重重,使得最终得分很低,排名情况也就不尽人意,并且在每次大作业结束后缺乏对之前问题的总结归纳,导致问题越积越多。
二.设计检查
1.第一次大作业
import java.util.*;
class Question
{
private int number;
private String content;
private String standardAnswer;
public Question(int number, String content, String standardAnswer)
{
this.number = number;
this.content = content;
this.standardAnswer = standardAnswer;
}
public int getNumber()
{
return number;
}
public String getContent()
{
return content;
}
public String getStandardAnswer()
{
return standardAnswer;
}
public boolean checkAnswer(String answer)
{
return standardAnswer.equals(answer);
}
}
class ExamPaper
{
private List
public void addQuestion(Question question)
{
questions.add(question);
}
public Question getQuestionByNumber(int number)
{
for (Question question : questions)
{
if (question.getNumber() == number)
{
return question;
}
}
return null;
}
}
class AnswerSheet
{
private ExamPaper examPaper;
private List
private List
public AnswerSheet(ExamPaper examPaper)
{
this.examPaper = examPaper;
}
public void addAnswer(String answer)
{
answers.add(answer);
}
public void gradeAnswers()
{
for (int i = 0; i < answers.size(); i++)
{
String answer = answers.get(i);
Question question = examPaper.getQuestionByNumber(i + 1);
if (question != null)
{
boolean result = question.checkAnswer(answer);
results.add(result);
}
}
}
public void printResults()
{
for (int i = 0; i < answers.size(); i++)
{
Question question = examPaper.getQuestionByNumber(i + 1);
if (question != null)
{
System.out.println(question.getContent().replace("#Q:", "") + "~" + answers.get(i));
}
}
for (boolean result : results)
{
System.out.print(result);
}
}
}
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int questionCount = Integer.parseInt(scanner.nextLine());
ExamPaper examPaper = new ExamPaper();
for (int i = 0; i < questionCount; i++)
{
String line = scanner.nextLine();
String[] parts = line.split(" ");
int number = Integer.parseInt(parts[0].replace("#N:", ""));
String content = parts[1].replace("#Q:", "");
String standardAnswer = parts[2].replace("#A:", "");
Question question = new Question(number, content, standardAnswer);
examPaper.addQuestion(question);
}
AnswerSheet answerSheet = new AnswerSheet(examPaper);
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
if (line.equals("end"))
{
break;
}
String answer = line.replace("#A:", "");
answerSheet.addAnswer(answer);
}
answerSheet.gradeAnswers();
answerSheet.printResults();
}
}
2.第二次大作业:
import java.util.*;
class Question
{
private int number;
private String content;
private String standardAnswer;
public Question(int number, String content, String standardAnswer)
{
this.number = number;
this.content = content;
this.standardAnswer = standardAnswer;
}
public int getNumber()
{
return number;
}
public String getContent()
{
return content;
}
public String getStandardAnswer()
{
return standardAnswer;
}
public boolean checkAnswer(String answer)
{
return standardAnswer.equals(answer);
}
}
class ExamPaper
{
private List
public void addQuestion(Question question)
{
questions.add(question);
}
public Question getQuestionByNumber(int number)
{
for (Question question : questions)
{
if (question.getNumber() == number)
{
return question;
}
}
return null;
}
}
class AnswerSheet
{
private ExamPaper examPaper;
private List
private List
public AnswerSheet(ExamPaper examPaper)
{
this.examPaper = examPaper;
}
public void addAnswer(String answer)
{
answers.add(answer);
}
public void gradeAnswers()
{
for (int i = 0; i < answers.size(); i++)
{
String answer = answers.get(i);
Question question = examPaper.getQuestionByNumber(i + 1);
if (question != null)
{
boolean result = question.checkAnswer(answer);
results.add(result);
}
}
}
public void printResults()
{
for (int i = 0; i < answers.size(); i++)
{
Question question = examPaper.getQuestionByNumber(i + 1);
if (question != null)
{
System.out.println(question.getContent().replace("#Q:", "") + "~" + answers.get(i));
}
}
for (boolean result : results)
{
System.out.print(result);
}
}
}
public class Main
{
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
int questionCount = Integer.parseInt(scanner.nextLine());
ExamPaper examPaper = new ExamPaper();
for (int i = 0; i < questionCount; i++)
{
String line = scanner.nextLine();
String[] parts = line.split(" ");
int number = Integer.parseInt(parts[0].replace("#N:", ""));
String content = parts[1].replace("#Q:", "");
String standardAnswer = parts[2].replace("#A:", "");
Question question = new Question(number, content, standardAnswer);
examPaper.addQuestion(question);
}
AnswerSheet answerSheet = new AnswerSheet(examPaper);
while (scanner.hasNextLine())
{
String line = scanner.nextLine();
if (line.equals("end"))
{
break;
}
String answer = line.replace("#A:", "");
answerSheet.addAnswer(answer);
}
answerSheet.gradeAnswers();
answerSheet.printResults();
}
}
3.第三次大作业
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
LinkedList<Student> student = new LinkedList<>();
LinkedList<AnswerPaper[]> answer = new LinkedList<>();
LinkedList<Boolean> judgeToAnswer = new LinkedList<>();
LinkedList<String[]> list = new LinkedList<>();
}
}
class Tool {
public static void processingString(LinkedList<String[]> allInformation, String str) {}
public static void manageLinkQuestion(LinkedList<String[]> list) {}
public static void manage100points(String[] element) {}
public static void manageToStudent(LinkedList<String[]> list, LinkedList<Student> student) {}
public static void manageToDelete(LinkedList<String[]> list) {}
public static String[] find_S_Answer(LinkedList<String[]> list) {}
public static String[] find_T_TestPaper(LinkedList<String[]> list, String temp) {}
public static int manageIsOrNo(LinkedList<String[]> list) {}
public static void manageConsist(LinkedList<String[]> list, LinkedList<Student> student,
LinkedList<AnswerPaper[]> answer, LinkedList<Boolean> judgeToAnswer) {}
public static void judgmentQuestion(LinkedList<String[]> list, LinkedList<Student> student,
LinkedList<AnswerPaper[]> answer, LinkedList<Boolean> judgeToAnswer) {}
}
class AnswerPaper {// 答卷类,判题结果将在这里产生
private int num = 1;
private String student_Answer;
private int mark = 0;
private boolean judge = false;
private String studentID;
private String studentName;
private boolean key = true;
public static TestPaper allProblems = new TestPaper();
public AnswerPaper(int num, String student_Answer, int mark, String studentID, String studentName) {}
public void setKey() {}
public String judgeToAnswer() {}
public int getMark() {}
public boolean matchIDandName() {}
public String getStudentID() {}
public void setStudentID(String studentID) {}
public String getStudentName() {}
public void setStudentName(String studentName) {}
public String get_A() {}
public void setNum(int num) {}
public AnswerPaper() {}
}
class TestPaper {// 试卷类,将存储所有题目,
private int num = 1;
public Topic[] questions;
public void setNum(int num) {}
public TestPaper() {}
public void set_Q_and_A(int i, String num, String question, String standardAnswer) {}
public String getTestPaperAnswer(int count) {}
public void deleteQuestion(String count) {}
public String getAllQuestion(int count) {}
}
class Topic {// 单独存储一个题目的类
private String num;
private String question;
private String standardAnswer;
private boolean condition = true;
public Topic() {}
public Topic(String num, String question, String standardAnswer) {}
public boolean getCondition() {}
public void setCondition(boolean condition) {}
public String getStandarAnswer() {}
public String getQuestion() {}
public String getNum() {}
}
class Student {
private String ID;
private String name;
public Student() {}
public Student(String ID, String name) {}
public String getID() {}
public void setID(String ID) {}
public String getName() {}
public void setName(String name) {}
}