首页 > 其他分享 >OOP 1~3总结

OOP 1~3总结

时间:2024-04-21 22:11:24浏览次数:18  
标签:总结 题目 String 答题 试卷 信息 OOP 答案

oop 1~3总结

前言

  • 知识点
    1.类的基本运用、类与对象的运用、类与数组的运用、关联类的使用

    2.接口的初步了解与运用
    3.日期类的使用

    这三次作业的最后一题涉及到的知识点比较多,综合性很强。宏观上重点考察的是我们对面向对象技术的整体把握,对程序设计原则的理解与使用,同时在细节上也考察了我们对java语法的掌握。例如:用正则表达式处理输入语句的格式、用数组、列表或Map对数据进行存储、用split()函数分割字符串等等。在完成作业时,由于题目每次都进行迭代,一次比一次难,涉及到的知识点也一次比一次多。

  • 题量

    整体的题量不算多,但是质量很高,每道题目的侧重点都稍有不同。若能认真完成作业上的题目,将每道题都理解透彻,就会对个人能力的提升有极大的帮助。

  • 难度
    对我个人而言,最后一题的难度是非常的大。不仅题干长难以理解,并且要有宏观的设计能力,要将不同的类之间的关系理清晰。但是我的基础比较差,有很多基础的语法我还没有搞清楚。再加上这个题目是老师原创的,之前没有见过类似的,我觉得比较抽象,也增加了题目的难度,完成起来很是困难。

设计与分析

第一次作业 答题判题程序-1

设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。

输入格式:

程序输入信息分三部分:

1、题目数量

格式:整数数值,若超过1位最高位不能为0,

样例:34

2、题目内容

一行为一道题,可以输入多行数据。

格式:"#N:"+题号+" "+"#Q:"+题目内容+" "#A:"+标准答案

格式约束:题目的输入顺序与题号不相关,不一定按题号顺序从小到大输入。

样例:#N:1 #Q:1+1= #A:2

 \#N:2 #Q:2+2= #A:4

3、答题信息

答题信息按行输入,每一行为一组答案,每组答案包含第2部分所有题目的解题答案,答案的顺序号与题目题号相对应。

格式:"#A:"+答案内容

格式约束:答案数量与第2部分题目的数量相同,答案之间以英文空格分隔。

样例:#A:2 #A:78

      2是题号为1的题目的答案
      78是题号为2的题目的答案

答题信息以一行"end"标记结束,"end"之后的信息忽略。

输出格式:

1、题目数量

格式:整数数值,若超过1位最高位不能为0,

样例:34

2、答题信息

一行为一道题的答题信息,根据题目的数量输出多行数据。

格式:题目内容+" ~"+答案

样例:1+1=~2

 2+2= ~4

3、判题信息

判题信息为一行数据,一条答题记录每个答案的判断结果,答案的先后顺序与题目题号相对应。

格式:判题结果+" "+判题结果

格式约束:

     1、判题结果输出只能是true或者false,
     2、判题信息的顺序与输入答题信息中的顺序相同

样例:true false true

2

3

4

5

类图:

源码如下:

import java.util.Scanner;

class Question {
    int questionNumber;
    String questionContent;
    String standardAnswer;

    public Question() {
    }

    public Question(int questionNumber, String questionContent, String standardAnswer) {
        this.questionNumber = questionNumber;
        this.questionContent = questionContent;
        this.standardAnswer = standardAnswer;
    }

    public void setQuestionContent(String questionContent) {
        this.questionContent = questionContent;
    }

    public String getQuestionContent() {
        return questionContent;
    }
}

class Paper {
    Question[] questions;
    String[] standardAnswers;

    public Paper(int numQuestions) {
        questions = new Question[numQuestions];
        standardAnswers = new String[numQuestions];
    }

    public void addQuestion(Question question, int index) {
        questions[index] = question;
    }

    public void setStandardAnswer(String standardAnswer, int index) {
        standardAnswers[index] = standardAnswer;
    }

    public boolean isCorrectAnswer(AnswerSheet answerSheet, int index) {
        return standardAnswers[index].equals(answerSheet.getAnswer(index));
    }

    public Question getQuestion(int index) {
        return questions[index];
    }
}

class AnswerSheet {
    String[] answers;

    public AnswerSheet(int numQuestions) {
        answers = new String[numQuestions];
    }

    public void setAnswer(String answer, int index) {
        answers[index] = answer;
    }

    public String getAnswer(int index) {
        return answers[index];
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        input.nextLine(); // Consume newline
        Paper paper = new Paper(n);
        AnswerSheet answerSheet = new AnswerSheet(n);

        for (int i = 0; i < n; i++) {
            String line = input.nextLine();
            String[] input1 = line.split(" *#N: *| *#A: *| *#Q: *");
            int num1 = Integer.parseInt(input1[1]) - 1;
            String content1 = input1[2];
            String standardAnswer1 = input1[3];
            Question question= new Question(num1, content1, standardAnswer1);
            paper.addQuestion(question, question.questionNumber);
            paper.setStandardAnswer(question.standardAnswer, question.questionNumber);
        }

        String answerInput = input.nextLine();
        String[] answers = answerInput.split(" *#A: *");

        for (int i = 0; i < n; i++) {
            answerSheet.setAnswer(answers[i + 1], i);
        }

        for (int i = 0; i < n; i++) {
            System.out.println(paper.getQuestion(i).getQuestionContent() + "~" + answerSheet.getAnswer(i));
        }

        for (int i = 0; i < n; i++) {
            if (i == n - 1) {
                System.out.print(paper.isCorrectAnswer(answerSheet, i));
            } else {
                System.out.print(paper.isCorrectAnswer(answerSheet, i) + " ");
            }
        }
    }

}

设计思路:

这道题目我是在老师给出来的设计建议上进行的类设计,分别设计了Question、Paper、和AnswerSheet类。

  • Question类表示一个题目,包含题号、题目内容和标准答案。这个类提供了带参数的构造函数用于初始化题目对象,以及 getter 和 setter 方法来获取和设置题目内容。
  • Paper类用于表示整张试卷,包含了题目数组和标准答案数组。构造函数接受题目数量作为参数,初始化题目和标准答案数组。addQuestion()方法接收Question类的对象和其在数组中的索引位置用来向试卷中添加题目;setStandardAnswer()方法接收传入的标准答案和索引位置用来向试卷中添加标准答案;isCorrectAnswer() 方法用于判断学生的答案是否正确。getQuestion() 方法来获取试卷中的某个题目。
  • AnswerSheet类用于表示学生的答题卡,包含了学生的答案数组。构造函数接收题目数量作为参数,初始化答案数组。并且提供了setter和getter方法来获取和设置学生的答案。
  • Main类包含了 首先从用户输入读取题目数量 n,然后创建试卷对象和答题卡对象。接着通过循环读取用户输入的每道题目的信息,解析后将题目添加到试卷对象中,并设置标准答案。读取学生的答案输入后,将学生的答案设置到答题卡对象中。最后循环输出每个题目及对应的学生答案,以及判断每个学生答案是否正确。

心得:

第一次的作业在第一时间看到的时候很是惊讶,理解能力较差的我连题目都读不懂,不知道想让我干什么,写的东西也是一团乱麻,最后截止的时候也没得到多少分。但是当我现在来总结时,将这道题目重新做了一遍,比较容易就写出来了并且得到了满分(我可太开心了嘻嘻)。但是还有需要修改的地方,可以让程序更加健壮,这部分后面会讲到。

第二次作业 答题判题程序-2

以下粗体字显示的是在答题判题程序-1基础上增补或者修改的内容

要求输入题目信息、试卷信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。

输入格式:

程序输入信息分三种,三种信息可能会打乱顺序混合输入

1、题目信息

一行为一道题,可输入多行数据(多道题)。

格式:"#N:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案

格式约束:

    1、题目的输入顺序与题号不相关,不一定按题号顺序从小到大输入。
    2、允许题目编号有缺失,例如:所有输入的题号为1、2、5,缺少其中的3号题。此种情况视为正常。

样例:#N:1 #Q:1+1= #A:2

 \#N:2 #Q:2+2= #A:4

2、试卷信息

一行为一张试卷,可输入多行数据(多张卷)。

格式:"#T:"+试卷号+" "+题目编号+"-"+题目分值

     题目编号应与题目信息中的编号对应。

     一行信息中可有多项题目编号与分值。

样例:#T:1 3-5 4-8 5-2

3、答卷信息

答卷信息按行输入,每一行为一张答卷的答案,每组答案包含某个试卷信息中的题目的解题答案,答案的顺序与试卷信息中的题目顺序相对应。

格式:"#S:"+试卷号+" "+"#A:"+答案内容

格式约束:答案数量可以不等于试卷信息中题目的数量,没有答案的题目计0分,多余的答案直接忽略,答案之间以英文空格分隔。

样例:#S:1 #A:5 #A:22

       1是试卷号 

       5是1号试卷的顺序第1题的题目答案

       22是1号试卷的顺序第2题的题目答案

答题信息以一行"end"标记结束,"end"之后的信息忽略。

输出格式:

1、试卷总分警示

该部分仅当一张试卷的总分分值不等于100分时作提示之用,试卷依然属于正常试卷,可用于后面的答题。如果总分等于100分,该部分忽略,不输出。

格式:"alert: full score of test paper"+试卷号+" is not 100 points"

样例:alert: full score of test paper2 is not 100 points

2、答卷信息

一行为一道题的答题信息,根据试卷的题目的数量输出多行数据。

格式:题目内容+""+答案++""+判题结果(true/false)

约束:如果输入的答案信息少于试卷的题目数量,答案的题目要输"answer is null"

样例:3+2=5true

 **4+6=~22~false.**
      answer is null

3、判分信息

判分信息为一行数据,是一条答题记录所对应试卷的每道小题的计分以及总分,计分输出的先后顺序与题目题号相对应。

格式:题目得分+" "+....+题目得分+"~"+总分

格式约束:

 1、没有输入答案的题目计0分

 2、判题信息的顺序与输入答题信息中的顺序相同

样例:5 8 0~13

根据输入的答卷的数量以上2、3项答卷信息与判分信息将重复输出。

4、提示错误的试卷号

如果答案信息中试卷的编号找不到,则输出”the test paper number does not exist”。

222

333

444

555

666

777

源码如下:

试卷题目类(****Question_Paper 新增****):用于保存试卷中的题目信息。由于试卷中的题目序

号与题目本身的题号不一致。且题目在不同试卷中的分值可能不一样,因此,设计试卷题目

类。

踩坑心得

  1. 一开始在写第一题时,我心情比较焦虑,越是焦虑就越是写不出来,反而焦虑之感又增多,对做出来这道题目毫无帮助。用的方法总是报错说数组越界,但是到最后我也没找出来原因。这次在重新做的时候冷静了许多,思路也更加的清晰了。所以面对难题心态一定不能崩掉噢~

改进建议

总结

标签:总结,题目,String,答题,试卷,信息,OOP,答案
From: https://www.cnblogs.com/oopLearning/p/18149611

相关文章

  • 前三次PTA题目集总结
    1.前言:前三次作业主要都是写答题判断程序,由于这学期才接触java,所以一开始对于怎么写,以及java语法有点不太适应。后来学习到“类”这个强大的工具和正则表达式,但因为并不熟练,所以写起来十分艰难。这三次题目难度逐级提升,都在原本的基础上添加了新的内容与知识点。类和对象的使用,关......
  • opp1~3总结与反思
    23201927-杨民星-第一次博客第一次opp题集:题目数量:5题题目难度:中等偏难知识点:ArrayList变长数组,排序,正则表达式,单一职责原则等对于这次opp题集,我遇到了很多不同的情况,如下细说:第一、前几题其实都是比较简单的题目,就是让我们认......
  • RT-Thread 专栏总结
    1、对RTOS/RT-Thread优先级反转的理解参考链接1:https://blog.csdn.net/m0_74712453/article/details/134001652参考链接2:https://blog.csdn.net/weixin_45590051/article/details/118330634优先级反转是实时操作系统最常见的问题,解决办法是互斥量使用优先级继承方法。1......
  • OOP课程第一次vlog-23201914-钱文浩
    一、前言1.知识点:第一次题目初步考察了正则表达式,其中包括正则表达式的判断(matches函数)和分割(split函数)。初步考察了类与对象的设计,比如实体类(试卷类,题目类等)、控制类(改卷类等),考查学生对实际问题的需求提取与分析。第二次题目进一步加强对上述各方面内容的考察。而且因为题目加......
  • 题目集1~3的总结
    一、前言一到三次题目集主要考察的知识点有类与对象的设计、类与方法的调用、数组、链表等;题量稍大,题目难度具有挑战性,需要经过认真的思考。二、设计与分析1、题目一:(1)题目:设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答......
  • OOP课第一阶段总结
    前三次OOP作业总结Blog前言作为第一次3+1的总结,这次题目集的难度逐渐升高,题量、阅读量和测试点的数量变化都很大,所以对我们的编程和理解能力提出了更高的要求。例如在第一次到第三次的题目集中,类的数量由三个增长到了十余个。投入的时间也由最开始的45个小时到了后来的1824......
  • PTA1-3总结w
    <1>前言:知识点:1.类的定义:代码中定义了三个类,Question、Answer和Paper,分别用来表示问题、答案和试卷。每个类都包含了相应的属性和方法。2.对象的创建:在main方法中通过new关键字创建了Question、Answer和Paper类的对象,然后对对象的属性进行赋值和操作。3.HashMap的使用:代码......
  • 关于题目集1~3的总结
    前言前三次pta作业最后一题都是答题判题程序,题目难度逐级提升但写完后收获也不小。首先一点是需求分析,不应上来就写代码而是从业务需求整体分析,在确定好程序的层次结构再开始实现相应的功能。在这三次作业中,将所学的编程知识很好地运用,其次,三次作业也同样考验我们的自学能力比......
  • NCHU题目集1~3的总结
    目录一.前言二.设计与分析三.采坑心得四.改进建议五.总结前言知识点总结题目集一字符串处理对输入的字符串进行对应的匹配与确认,找到对应的字符串的内容,将对应字符串中不合规范的内容进行处理,合格后直接存储。字符串的比对,满足要求的字符串进行输出和相应......
  • OOP第一次Blog
    本次Blog总结前三次作业的心得和体会**前言:前三次PTA作业整体难度不算很大,题量也一般,但是运用的知识点还是挺多挺杂的。第一次:没用到什么繁琐的知识点,初步见识到类之间的关联性和耦合性,难度不大,但是比较考验耐性。第二次:开始接触接口,用接口辅助排序,最后一道题在第一次的基础上......