首页 > 其他分享 >题目集4-6的总结性Blog

题目集4-6的总结性Blog

时间:2024-06-09 10:55:32浏览次数:23  
标签:inputs 总结性 题目 String question Blog correctAnswer new public

一,前言

一-1.第四次题集是接着前面的第三次题集的迭代,知识点主要是继承的运用,正则表达式的运用同样少不了,相对于前面一次添加了对选题以及填空题,难度也相对于前一次加大。

一-2.第五次题集是新的题集迭代是有关电路的,知识点有抽象类,抽象方法的使用以及继承的使用,同样正则表达式;由于没有考虑电阻问题只有一个用电器,也是只有一条串联电路,难度比较小。

一-3.第六次是第五次的迭代,知识点有抽象类,抽象方法,继承,接口,正则表达式。相对于上一次添加了串联电路,同时考虑电阻,所以难度有所提升。

二,设计分析

二-1,答判断-4


源代码如下:

点击查看代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Map<String, Question> questionMap = new HashMap<>();
        Map<String, TestPaper> testPaperMap = new HashMap<>();
        Map<String, Student> studentMap = new HashMap<>();
        List<Answer> answerList = new ArrayList<>();
        int totalScore = 0;
        boolean isAlert = false;

        while (true) {
            String input = scanner.nextLine();
            if (input.equals("end")) {
                break;
            }

            String[] inputs = input.split(" ");
            String type = inputs[0];
            String output1 = type.substring(0, 2);


            switch (output1) {
                case "#N":
                    Question question = new Question(inputs[0], inputs[1], inputs[2]);
                    questionMap.put(inputs[1], question);
                    break;
                case "#T":
                    TestPaper testPaper = new TestPaper(inputs[1]);
                    for (int i = 2; i < inputs.length; i += 2) {
                        testPaper.addQuestion(questionMap.get(inputs[i]), Integer.parseInt(inputs[i + 1]));
                    }
                    testPaperMap.put(inputs[1], testPaper);
                    if (testPaper.getTotalScore()!= 100) {
                        isAlert = true;
                    }
                    break;
                case "#X":
                    Student student = new Student(inputs[1]);
                    for (int i = 2; i < inputs.length; i += 2) {
                        student.addName(inputs[i]);
                    }
                    studentMap.put(inputs[1], student);
                    break;
                case "#S":
                    Answer answer = new Answer(inputs[1], inputs[3]);
                    for (int i = 4; i < inputs.length; i += 2) {
                        answer.addAnswer(questionMap.get(inputs[i]), inputs[i + 1]);
                    }
                    answerList.add(answer);
                    break;
                case "#D":
                    questionMap.remove(inputs[2]);
                    break;
                default:
                    //System.out.println("wrong format: " + input);
                    break;
            }
        }
        for (Answer answer : answerList) {
            TestPaper testPaper = testPaperMap.get(answer.getTestPaperNumber());
            Student student = studentMap.get(answer.getStudentNumber());
            if (testPaper == null) {
                System.out.println("the test paper number does not exist");
                continue;
            }
            if (student == null) {
                //System.out.println("wrong format: student number does not exist");
                continue;
            }

            int totalScoreForStudent = 0;
            List<String> result = new ArrayList<>();

            for (Map.Entry<Question, String> entry : answer.getAnswers().entrySet()) {
                Question question = entry.getKey();
                String studentAnswer = entry.getValue();
                String correctAnswer = question.getCorrectAnswer();
                int questionScore = testPaper.getQuestionScore(question);

                if (question instanceof ChoiceQuestion) {
                    if (studentAnswer.equals(correctAnswer)) {
                        totalScoreForStudent += questionScore;
                        result.add("true");
                    } else {
                        result.add("false");
                    }
                } else if (question instanceof FillQuestion) {
                    if (studentAnswer.equalsIgnoreCase(correctAnswer)) {
                        totalScoreForStudent += questionScore;
                        result.add("true");
                    } else {
                        result.add("false");
                    }
                }
            }

            if (result.size() < testPaper.getQuestions().size()) {
                for (int i = result.size(); i < testPaper.getQuestions().size(); i++) {
                    result.add("answer is null");
                }
            }

            System.out.println(student.getStudentNumber() + " " + student.getStudentName() + ": " + String.join(" ", result) + "~" + totalScoreForStudent);
            totalScore += totalScoreForStudent;
        }

        if (isAlert) {
            System.out.println("alert: full score of test paper is not 100 points");
        }

        scanner.close();
    }
}

class Question {
    private String questionNumber;
    private String questionContent;
    private String correctAnswer;

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

    public String getQuestionNumber() {
        return questionNumber;
    }

    public String getCorrectAnswer() {
        return correctAnswer;
    }
}

class ChoiceQuestion extends Question {
    public ChoiceQuestion(String questionNumber, String questionContent, String correctAnswer) {
        super(questionNumber, questionContent, correctAnswer);
    }
}

class FillQuestion extends Question {
    public FillQuestion(String questionNumber, String questionContent, String correctAnswer) {
        super(questionNumber, questionContent, correctAnswer);
    }
}

class TestPaper {
    private String testPaperNumber;
    private Map<Question, Integer> questions;

    public TestPaper(String testPaperNumber) {
        this.testPaperNumber = testPaperNumber;
        this.questions = new HashMap<>();
    }

    public void addQuestion(Question question, int score) {
        questions.put(question, score);
    }

    public int getTotalScore() {
        int totalScore = 0;
        for (int score : questions.values()) {
            totalScore += score;
        }
        return totalScore;
    }

    public int getQuestionScore(Question question) {
        return questions.get(question);
    }

    public Set<Question> getQuestions() {
        return questions.keySet();
    }
}

class Student {
    private String studentNumber;
    private List<String> studentNames;

    public Student(String studentNumber) {
        this.studentNumber = studentNumber;
        this.studentNames = new ArrayList<>();
    }

    public void addName(String studentName) {
        studentNames.add(studentName);
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public String getStudentName() {
        return String.join(" ", studentNames);
    }
}

class Answer {
    private String testPaperNumber;
    private String studentNumber;
    private Map<Question, String> answers;

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

    public void addAnswer(Question question, String answer) {
        answers.put(question, answer);
    }

    public String getTestPaperNumber() {
        return testPaperNumber;
    }

    public String getStudentNumber() {
        return studentNumber;
    }

    public Map<Question, String> getAnswers() {
        return answers;
    }
}
期间有试卷的各种类addanswer,Answer,Testpaper,还有学生类student. 还有从main函数中可以看出有大量的循环和正则表达式的筛选,而这次代码对上次的复用性不大,由于上次代码的bug比较多。

二-2.家居强电电路模拟程序-1

标签:inputs,总结性,题目,String,question,Blog,correctAnswer,new,public
From: https://www.cnblogs.com/smile0314/p/18239339

相关文章

  • 第二次Blog
    前言:个人感觉第四次练习是之前三次练习的总结和衍生,在前三次练习的不断叠加的基础上,添加了选择题、多选题、填空题和对其他异常情况的添加的需求,回望第一次练习,从一开始的单单通过输入题目数量和题目以及其答案输出题目以及其对错,通过一次又一次对一开始的源码的修改和功能的添......
  • NSSCTF-Web题目6
    目录[NISACTF2022]checkin1、题目2、知识点3、思路[NISACTF2022]babyupload1、题目2、知识点3、思路[SWPUCTF2022新生赛]1z_unserialize1、题目2、知识点3、思路[NISACTF2022]checkin1、题目2、知识点010编辑器的使用、url编码3、思路打开题目,得到源......
  • Java第二次Blog
    7-4~6题目集前言这些题目主要用到对象与类的处理继承与多态的使用:继承和多态是面向对象编程中相互关联的两个概念。继承为多态提供了基础,而多态则通过继承实现了代码的灵活性和可扩展性。1.字符串处理:需要对输入的题目信息和答题信息进行字符串分割、提取和处理,以获取题目编号......
  • 第二次Blog
    一.前言第四次大作业是第三次大作业的迭代,增加了题目的类型,即题目可以有选择题和填空题,其中选择题也可能有多选题,存在多个答案。以此增加了对继承和多态的使用,同时也考验了正则表达式的匹配,输入时的情况与第三次改变较大。接下来五到六次大作业则改变为对电路的设计,总体也是考察......
  • 对题目集4~6的总结
    1.前言答题判题程序-4是前几次题目迭代,在前几次的基础上新增加了选择、填空题,按照之前的思路拓展即可。家居强电电路模拟程序-1、2总体难度适中,不过与普通的信息处理相比,分配电压要考虑更多情况。2.设计与分析答题判题程序-4点击查看题目设计实现答题程序,模拟一个小型......
  • 南昌航空大学软件学院23201823第二次blog
    一、前言:这是第二次的blog,接下来关于这最近三次的PTA大作业,只有第一次是上次答题判题程序的延续,接下来则是一个全新的关于电路的设计,最新的电路设计相较于之前的答题判题程序来说的话,难度确实有所下降。前两次中都含有三道题,而最后一次的PTA则是删去了其余两道题,让我们专心钻研新......
  • 题目集4~6的总结
    目录一.前言 nchu-software-oop-2024-上-4~知识点 nchu-software-oop-2024-上-5~知识点 nchu-software-oop-2024-上-6~知识点二.设计与分析一.答题判题程序-41.继承2.多态二.家居强电电路模拟程序-11.类的设计2.抽象类二.家居强电电路模拟程序-21.面向对象设计原则——单一......
  • OOP题目集4~6的总结
    目录(一)前言(二)作业介绍(三)算法与代码(四)PowerDesigner类图模型(五)SourceMonitor代码分析(六)自学内容(七)总结一、前言介绍本篇博客的大致内容、写作目的、意义等本篇博客介绍如何使用Java语言基础和算法来解决题目问题,在此基础上进行对最近Java编程语言学习的总结题目的......
  • 23201405-pta的总结blog-二
    前言本次作业blog主要对于答题判题程序4、家具强电电路模拟1-2进行分析说明和总结。这三次题目集的题目量和难度不必多说,题不在多,而在精。题目主要是为了提高能力,区分层次而出,难度不小。知识点主要有,抽象类、输入输出的处理,正则表达等。更重要的是分析题目,设计程序并实现的能......
  • 小端序题目——[LitCTF 2023]debase64
    还挺有价值的,记录一下题目DIEPE文件在Windows操作系统下默认使用小端序IDAmain函数绿框:输入长度要20红框:base64加密黄框:加密后的结果要与关键数据相等  获取数据,我一般喜欢调试看栈,这样就少一次翻转了 取出15个数据:0x46,0xED,0x18,0x96,0x56,0x9E,0xD2,......