首页 > 其他分享 >23201115-邓俊豪-第二次blog

23201115-邓俊豪-第二次blog

时间:2024-06-09 22:44:36浏览次数:19  
标签:blog java 定义 包含 show 23201115 邓俊豪 stringArrayList Device

目录

blog2

前言

关于难度和题目量

前三次大作业难度属于偏难水平,题目量也在可承受范围内

关于知识点

以下是一些总结的知识点:

  1. 类的定义:在Java中,使用class关键字来定义类,可以包含属性和方法。
  2. 继承和抽象类:通过extends关键字实现类的继承,抽象类使用abstract关键字定义,抽象方法需要在子类中实现。
  3. 接口:接口定义了一组方法的规范,类通过implements关键字实现接口,实现接口的类需要实现接口中定义的所有方法。
  4. HashMap和ArrayList:HashMap是Java中的哈希表实现,用于存储键值对;ArrayList是动态数组,用于存储对象的集合。
  5. 正则表达式:通过Pattern和Matcher类实现正则表达式的匹配和提取。
  6. 输入输出:使用Scanner类实现从控制台输入数据,System.out.println()用于输出数据。
  7. 排序:使用Collections.sort()方法对集合进行排序。
  8. 方法的重写和重载:在子类中重写父类的方法,实现不同的功能;方法重载是指在同一个类中,方法名相同但参数列表不同的情况。
  9. 深度复制: 复制之后的对象有一个新的地址

设计与分析

pta4

一、项目简介

本文将介绍如何使用 Java 实现一个简单的试卷批改系统。该系统可以读取试卷内容和学生答案,然后根据预设的标准答案进行批改,并输出学生的得分和错题情况。

二、项目实现

  1. 问题库:定义了问题库类 QuestionBase,其中包含问题库名称和一个 HashMap 来存储问题。
  2. 问题类:定义了抽象类 Question 作为所有问题类型的父类,以及三个具体问题类 SingleQuestionGapFillQuestionMulQuestion,分别表示单选题、填空题和多选题。
  3. 试卷类:定义了试卷类 TextPaper,其中包含试卷编号、问题数量、问题列表、总分等属性,以及输入问题、添加问题、计算总分等方法。
  4. 答卷类:定义了答卷类 AnswerPaper,其中包含答卷编号、学生学号、试卷、答案、得分等属性,以及比较方法和计算得分的方法。
  5. 学生类:定义了学生类 Student,其中包含学生 ID 和姓名两个属性。
  6. 解析类:定义了解析类 Parse,其中包含将文本转换为问题库、删除问题、将文本转换为试卷、将文本转换为学生信息、将文本转换为答卷等静态方法。
  7. 展示类:定义了展示类 Show,其中包含展示错误格式、展示试卷总分、展示答卷详情等静态方法。

三、项目测试

  1. 输入问题库文本,包含单选题、填空题和多选题。
  2. 输入试卷文本,包含试卷编号和问题编号及分数。
  3. 输入学生答案文本,包含答卷编号和学生学号及答案。
  4. 调用解析类的静态方法将文本转换为问题库、试卷和学生信息。
  5. 调用展示类的静态方法展示错误格式和试卷总分。
  6. 遍历答卷列表,调用展示类的静态方法展示答卷详情。

四、代码示例

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> stringArrayList = input();//输入数据用list的方式保存
        HashMap<Integer, Question> questionHashMap = new HashMap<>();//question.N question
        Parse parse = new Parse();
        questionHashMap = parse.Toquestionhashmap(stringArrayList);
        questionHashMap=parse.DeleteQuestion(questionHashMap,stringArrayList);
        HashMap<Integer, TextPaper> textPaperHashMap = parse.ToHashPaper(stringArrayList, questionHashMap);
        HashMap<String, Student> stringStudentHashMap = parse.ToStudentHashmap(stringArrayList);
        ArrayList<AnswerPaper> answerPaperArrayList = parse.ToAnswerpaperArraylist(stringArrayList, textPaperHashMap);
        ArrayList<TextPaper> textPaperArrayList = parse.TotextPaperArrayList(stringArrayList, questionHashMap);
        Show show = new Show();
        show.ShowWrongFormat(stringArrayList);
        show.ShowTextPaperScore(textPaperArrayList);
        Collections.sort(answerPaperArrayList);
        for (AnswerPaper answerPaper : answerPaperArrayList) {
            answerPaper=show.show1(answerPaper);
            show.show2(answerPaper, stringStudentHashMap);
        }
    }
}

五、总结

通过以上步骤,我们可以使用 Java 实现一个简单的试卷批改系统。该系统可以读取试卷内容和学生答案,然后根据预设的标准答案进行批改,并输出学生的得分和错题情况。

六、代码分析

Metrics Details For File 'pta4.java'

Parameter Value
========= =====
Project Directory C:\Users\11813\Desktop\java文件
Project Name blog2
Checkpoint Name Baseline
File Name pta4.java
Lines 565*
Statements 428
Percent Branch Statements 17.1
Method Call Statements 196
Percent Lines with Comments 4.1
Classes and Interfaces 13
Methods per Class 4.92
Average Statements per Method 4.98
Line Number of Most Complex Method 501
Name of Most Complex Method Show.ShowWrongFormat()
Maximum Complexity 10
Line Number of Deepest Block 403
Maximum Block Depth 6
Average Block Depth 2.62
Average Complexity 2.14


Most Complex Methods in 13 Class(es): Complexity, Statements, Max Depth, Calls

Answer.getAnswer() 1, 1, 2, 0
Answer.getN() 1, 1, 2, 0
Answer.setAnswer() 1, 1, 2, 0
Answer.setN() 1, 1, 2, 0
AnswerPaper.compareTo() 6, 10, 4, 2
AnswerPaper.getAnswer() 1, 1, 2, 0
AnswerPaper.getN() 1, 1, 2, 0
AnswerPaper.getScore() 1, 1, 2, 0
AnswerPaper.getScoreArr() 1, 1, 2, 0
AnswerPaper.getStudentNumber() 1, 1, 2, 0
AnswerPaper.getTextPaper() 1, 1, 2, 0
AnswerPaper.setAnswer() 1, 1, 2, 0
AnswerPaper.setN() 1, 1, 2, 0
AnswerPaper.setScore() 1, 1, 2, 0
AnswerPaper.setScoreArr() 1, 1, 2, 0
AnswerPaper.setStudentNumber() 1, 1, 2, 0
AnswerPaper.setTextPaper() 1, 1, 2, 0
GapFillQuestion.judgeanswer() 7, 14, 5, 1
Main.input() 3, 8, 3, 3
Main.main() 2, 15, 3, 10
MulQuestion.judgeanswer() 7, 16, 5, 1
Parse.DeleteQuestion() 3, 7, 4, 7
Parse.ToAnswerpaperArraylist() 5, 22, 5, 14
Parse.ToHashPaper() 7, 33, 6, 29
Parse.Toquestionhashmap() 8, 38, 5, 38
Parse.ToStudentHashmap() 4, 11, 5, 9
Parse.TotextPaperArrayList() 5, 28, 5, 26
Question.getContent() 1, 1, 2, 0
Question.getNum() 1, 1, 2, 0
Question.getStanderAnswer() 1, 1, 2, 0
Question.isIs_delete() 1, 1, 2, 0
Question.setContent() 1, 1, 2, 0
Question.setIs_delete() 1, 1, 2, 0
Question.setNum() 1, 1, 2, 0
Question.setStanderAnswer() 1, 1, 2, 0
QuestionBase.getName() 1, 1, 2, 0
QuestionBase.getQuestionHashMap() 1, 1, 2, 0
QuestionBase.setName() 1, 1, 2, 0
QuestionBase.setQuestionHashMap() 1, 1, 2, 0
QuestionInPaper.getN() 1, 1, 2, 0
QuestionInPaper.getQuestion() 1, 1, 2, 0
QuestionInPaper.getScore() 1, 1, 2, 0
QuestionInPaper.setN() 1, 1, 2, 0
QuestionInPaper.setQuestion() 1, 1, 2, 0
QuestionInPaper.setScore() 1, 1, 2, 0
Show.show1() 9, 31, 4, 31
Show.show2() 6, 16, 4, 10
Show.ShowTextPaperScore() 3, 3, 4, 2
Show.ShowWrongFormat() 10, 10, 4, 8
SingleQuestion.judgeanswer() 3, 4, 3, 2
Student.getID() 1, 1, 2, 0
Student.getName() 1, 1, 2, 0
Student.setID() 1, 1, 2, 0
Student.setName() 1, 1, 2, 0
TextPaper.AddQuestion() 1, 2, 2, 1
TextPaper.getN() 1, 1, 2, 0
TextPaper.getQuestionInPaperArrayList() 1, 1, 2, 0
TextPaper.getQuestionNum() 1, 1, 2, 0
TextPaper.getSumScore() 1, 1, 2, 0
TextPaper.inputQuestion() 1, 1, 2, 1
TextPaper.setN() 1, 1, 2, 0
TextPaper.setQuestionInPaperArrayList() 2, 5, 3, 0
TextPaper.setQuestionNum() 1, 1, 2, 0
TextPaper.setSumScore() 1, 1, 2, 0


Block Depth Statements

0 19
1 90
2 123
3 55
4 87
5 52
6 2
7 0
8 0
9+ 0

pta-5

一、项目简介

本文将介绍如何使用 Java 实现一个简单的电路系统。该系统可以模拟开关、调速器、风扇、灯泡等电子元件的工作状态,并根据用户输入的指令进行相应的操作。

二、项目实现

  1. 设备类:定义了设备类 Device,其中包含设备名称、是否打开、引脚 1 电压、引脚 2 电压、电阻、电流等属性,以及显示设备信息、改变设备状态、调速等方法。
  2. 控制设备类:定义了控制设备类 ControlledDevice,继承自设备类 Device,其中包含改变设备状态的方法。
  3. 控制设备类:定义了控制设备类 ControllingDevice,继承自设备类 Device,其中包含调速方法。
  4. 串联电路类:定义了串联电路类 SeriesCircuit,继承自设备类 Device,其中包含计算电流的方法。
  5. 开关类:定义了开关类 Switch,继承自控制设备类 ControllingDevice,其中包含打开和关闭开关的方法。
  6. 调速器类:定义了调速器类 SpeedController,继承自控制设备类 ControllingDevice,其中包含调速方法。
  7. 连续调速器类:定义了连续调速器类 ContinuousSpeedController,继承自调速器类 SpeedController,其中包含改变调速值的方法。
  8. 换挡调速器类:定义了换挡调速器类 ShiftSpeedController,继承自调速器类 SpeedController,其中包含换挡的方法。
  9. 风扇类:定义了风扇类 Fan,继承自控制设备类 ControlledDevice,其中包含计算风速的方法。
  10. 吊扇类:定义了吊扇类 CeilingFan,继承自风扇类 Fan,其中包含计算风速的具体实现。
  11. 灯泡类:定义了灯泡类 Lamp,继承自控制设备类 ControlledDevice,其中包含计算亮度的方法。
  12. 白炽灯类:定义了白炽灯类 IncandescentLamp,继承自灯泡类 Lamp,其中包含计算亮度的具体实现。
  13. 荧光灯类:定义了荧光灯类 FluorescentLamp,继承自灯泡类 Lamp,其中包含计算亮度的具体实现。
  14. 主函数类:定义了主函数类 Main,其中包含获取设备对象、处理用户指令、更新设备状态、显示设备信息等方法。

三、项目测试

  1. 输入设备指令,例如 [VCC 1-1][1-2 2-1][2-2 GND] 等。
  2. 输入控制指令,例如 #K1#F1+#L1:on 等。
  3. 输入结束指令 end
  4. 程序将输出设备的状态信息,例如开关的打开或关闭状态、调速器的当前速度、风扇的风速、灯泡的亮度等。

四、代码示例

import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> stringArrayList = new ArrayList<>();
        while (true) {
            String s = scanner.nextLine();
            if (s.equals("end")) {
                break;
            } else {
                stringArrayList.add(s);
            }
        }
        ArrayList<Device> deviceArrayList = new ArrayList<>();
        for (String s : stringArrayList) {
            if (GetDevice(s)!= null) {
                deviceArrayList.add(GetDevice(s));
            }
        }
        deviceArrayList.remove(deviceArrayList.size() - 2);
        a(stringArrayList, deviceArrayList);
        if (b(deviceArrayList)) {
            if (deviceArrayList.size() == 1) {
                deviceArrayList.get(0).setPin1(220);
            } else {
                for (int i = 0; i < deviceArrayList.size() - 1; i++) {
                    deviceArrayList.get(i).SpeedRegulation();
                    deviceArrayList.get(i + 1).setPin1(deviceArrayList.get(i).getPin2());
                }
            }
        } else {
            for (Device device : deviceArrayList) {
                device.setPin1(0);
                device.setPin2(0);
            }
        }
        for (Device device : deviceArrayList) {
            if (device instanceof Switch) {
                device.show();
            }
        }
        for (Device device : deviceArrayList) {
            if (!(device instanceof Switch)) {
                device.show();
            }
        }
    }
}

五、总结

通过以上步骤,我们可以使用 Java 实现一个简单的电路系统。该系统可以模拟开关、调速器、风扇、灯泡等电子元件的工作状态,并根据用户输入的指令进行相应的操作。

六、代码分析


Metrics Details For File 'pta5.java'

Parameter Value
========= =====
Project Directory C:\Users\11813\Desktop\java文件
Project Name blog2
Checkpoint Name Baseline
File Name pta5.java
Lines 384*
Statements 274
Percent Branch Statements 21.5
Method Call Statements 95
Percent Lines with Comments 0.0
Classes and Interfaces 14
Methods per Class 3.64
Average Statements per Method 3.71
Line Number of Most Complex Method 362
Name of Most Complex Method Main.main()
Maximum Complexity 16
Line Number of Deepest Block 317
Maximum Block Depth 6
Average Block Depth 2.27
Average Complexity 2.25


Most Complex Methods in 13 Class(es): Complexity, Statements, Max Depth, Calls

CeilingFan.CalculateSpeed() 5, 11, 3, 3
CeilingFan.CeilingFan() 1, 1, 2, 1
CeilingFan.show() 1, 2, 2, 2
ContinuousSpeedController.change() 1, 1, 2, 0
ContinuousSpeedController.ContinuousSpeedController() 1, 1, 2, 1
ContinuousSpeedController.show() 1, 1, 2, 1
ContinuousSpeedController.SpeedRegulation() 1, 1, 2, 1
ControlledDevice.ControlledDevice() 1, 1, 2, 1
ControllingDevice.ControllingDevice() 1, 1, 2, 1
Device.change() 1, 0, 0, 0
Device.Device() 1, 0, 0, 0
Device.getI() 1, 1, 2, 0
Device.getName() 1, 1, 2, 0
Device.getPin1() 1, 1, 2, 0
Device.getPin2() 1, 1, 2, 0
Device.getR() 1, 1, 2, 0
Device.isOpen() 1, 1, 2, 0
Device.setI() 1, 1, 2, 0
Device.setName() 1, 1, 2, 0
Device.setOpen() 1, 1, 2, 0
Device.setPin1() 1, 1, 2, 0
Device.setPin2() 1, 1, 2, 0
Device.setR() 1, 1, 2, 0
Device.show() 1, 0, 0, 0
Device.SpeedRegulation() 1, 0, 0, 0
Fan.Fan() 1, 1, 2, 1
Fan.getSpeed() 1, 1, 2, 0
Fan.setSpeed() 1, 1, 2, 0
FluorescentLamp.CalculateLux() 3, 5, 3, 2
FluorescentLamp.show() 1, 2, 2, 2
IncandescentLamp.CalculateLux() 7, 9, 3, 4
IncandescentLamp.show() 1, 2, 2, 2
Lamp.getLux() 1, 1, 2, 0
Lamp.Lamp() 1, 2, 2, 1
Lamp.setLux() 1, 1, 2, 0
Main.a() 14, 32, 6, 18
Main.b() 3, 4, 4, 1
Main.GetDevice() 13, 38, 5, 21
Main.main() 16, 30, 5, 19
ShiftSpeedController.change() 5, 4, 3, 2
ShiftSpeedController.ShiftSpeedController() 1, 2, 2, 1
ShiftSpeedController.show() 1, 1, 2, 1
ShiftSpeedController.SpeedRegulation() 1, 1, 2, 1
SpeedController.SpeedController() 1, 1, 2, 1
Switch.change() 3, 4, 3, 0
Switch.isOpen() 1, 1, 2, 0
Switch.setOpen() 1, 1, 2, 0
Switch.show() 3, 6, 3, 1
Switch.SpeedRegulation() 3, 4, 3, 2
Switch.Switch() 1, 2, 2, 2
Switch.Switch() 1, 1, 2, 0


Block Depth Statements

0 18
1 67
2 88
3 48
4 32
5 18
6 3
7 0
8 0
9+ 0


pta-6

一、项目简介

本文将介绍如何使用 Java 实现一个简单的电路系统。该系统可以模拟开关、调速器、风扇、灯泡等电子元件的工作状态,并根据用户输入的指令进行相应的操作。

二、项目实现

  1. 设备类:定义了设备类 Device,其中包含设备名称、是否打开、电阻、电流、电压等属性,以及计算电阻、计算电流、显示设备信息等方法。
  2. 控制设备类:定义了控制设备类 ControlledDevice,继承自设备类 Device,其中包含改变设备状态的方法。
  3. 控制设备类:定义了控制设备类 ControllingDevice,继承自设备类 Device,其中包含调速方法。
  4. 开关类:定义了开关类 Switch,继承自控制设备类 ControllingDevice,其中包含打开和关闭开关的方法。
  5. 调速器类:定义了调速器类 SpeedController,继承自控制设备类 ControllingDevice,其中包含调速方法。
  6. 连续调速器类:定义了连续调速器类 ContinuousSpeedController,继承自调速器类 SpeedController,其中包含改变调速值的方法。
  7. 换挡调速器类:定义了换挡调速器类 ShiftSpeedController,继承自调速器类 SpeedController,其中包含换挡的方法。
  8. 风扇类:定义了风扇类 Fan,继承自控制设备类 ControlledDevice,其中包含计算风速的方法。
  9. 吊扇类:定义了吊扇类 CeilingFan,继承自风扇类 Fan,其中包含计算风速的具体实现。
  10. 落地扇类:定义了落地扇类 FloorFan,继承自风扇类 Fan,其中包含计算风速的具体实现。
  11. 灯泡类:定义了灯泡类 Lamp,继承自控制设备类 ControlledDevice,其中包含计算亮度的方法。
  12. 白炽灯类:定义了白炽灯类 IncandescentLamp,继承自灯泡类 Lamp,其中包含计算亮度的具体实现。
  13. 荧光灯类:定义了荧光灯类 FluorescentLamp,继承自灯泡类 Lamp,其中包含计算亮度的具体实现。
  14. 线路类:定义了线路类 Line,其中包含设备列表、是否为主线等属性,以及计算电阻、计算电流、显示设备信息等方法。
  15. 并联电路类:定义了并联电路类 ParallelCircuits,其中包含设备列表等属性,以及计算电阻、计算电流、显示设备信息等方法。
  16. 输入类:定义了输入类 Input,其中包含输入数据、解析数据等方法。
  17. 主函数类:定义了主函数类 Main,其中包含读取输入数据、解析输入数据、计算电路状态、显示设备信息等方法。

三、项目测试

  1. 输入设备指令,例如 #T1:[IN K1]#T2:[VCC F1+]#M1:T1 T2 等。
  2. 输入控制指令,例如 #K1#F1+#L1:on 等。
  3. 输入结束指令 end
  4. 程序将输出设备的状态信息,例如开关的打开或关闭状态、调速器的当前速度、风扇的风速、灯泡的亮度等。

四、代码示例

import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        Input input = new Input();
        input.getInputData();
        TreeMap<String, Device> deviceTreeMap = new TreeMap<>(new ReverseComparator());
        ArrayList<Line> list = new ArrayList<>();
        input.parse(deviceTreeMap, list);
        for (Line line : list) {
            if (line.getIsMain() == 1) {
                line.countR();
            }
        }
        for (Line line : list) {
            if (line.getIsMain() == 1) {
                line.setU(220);
                int flag = 0;
                for (Device device : line.getDeviceArrayList()) {
                    if (device instanceof SpeedController) {
                        device.SpeedRegulation();
                        line.is();
                        if (line.isOpen()) {
                            line.setI((220 - device.getU()) / line.getR());
                            line.countI();
                            flag = 1;
                        }
                    }
                }
                if (flag == 0) {
                    line.is();
                    if (line.isOpen()) {
                        line.setI(220 / line.getR());
                        line.countI();
                    }
                }
            }
        }
        for (Device device : deviceTreeMap.values()) {
            device.show();
        }
    }
}

五、总结

通过以上步骤,我们可以使用 Java 实现一个简单的电路系统。该系统可以模拟开关、调速器、风扇、灯泡等电子元件的工作状态,并根据用户输入的指令进行相应的操作。

六、代码分析


Metrics Details For File 'pta6.java'

Parameter Value
========= =====
Project Directory C:\Users\11813\Desktop\java文件
Project Name blog2
Checkpoint Name Baseline
File Name pta6.java
Lines 746*
Statements 572
Percent Branch Statements 17.0
Method Call Statements 263
Percent Lines with Comments 0.3
Classes and Interfaces 18
Methods per Class 4.72
Average Statements per Method 5.09
Line Number of Most Complex Method 557
Name of Most Complex Method Input.parse()
Maximum Complexity 30
Line Number of Deepest Block 581
Maximum Block Depth 9+
Average Block Depth 2.60
Average Complexity 2.25


Most Complex Methods in 18 Class(es): Complexity, Statements, Max Depth, Calls

CeilingFan.CeilingFan() 1, 1, 2, 1
CeilingFan.Copy() 1, 9, 2, 6
CeilingFan.Count() 5, 11, 3, 3
CeilingFan.show() 1, 2, 2, 2
ContinuousSpeedController.change() 1, 1, 2, 0
ContinuousSpeedController.ContinuousSpeedController() 1, 1, 2, 1
ContinuousSpeedController.Copy() 1, 9, 2, 6
ContinuousSpeedController.getA() 1, 1, 2, 0
ContinuousSpeedController.setA() 1, 1, 2, 0
ContinuousSpeedController.show() 1, 1, 2, 1
ContinuousSpeedController.SpeedRegulation() 1, 1, 2, 1
ControlledDevice.ControlledDevice() 1, 1, 2, 1
ControllingDevice.ControllingDevice() 1, 1, 2, 1
Device.change() 1, 0, 0, 0
Device.Copy() 1, 6, 2, 0
Device.Count() 1, 0, 0, 0
Device.countI() 1, 0, 0, 0
Device.countR() 1, 1, 2, 0
Device.Device() 1, 0, 0, 0
Device.getI() 1, 1, 2, 0
Device.getName() 1, 1, 2, 0
Device.getR() 1, 1, 2, 0
Device.getU() 1, 1, 2, 0
Device.is() 1, 0, 0, 0
Device.isOpen() 1, 1, 2, 0
Device.setI() 1, 1, 2, 0
Device.setName() 1, 1, 2, 0
Device.setOpen() 1, 1, 2, 0
Device.setR() 1, 1, 2, 0
Device.setU() 1, 1, 2, 0
Device.show() 1, 0, 0, 0
Device.SpeedRegulation() 1, 0, 0, 0
Fan.Fan() 1, 1, 2, 1
Fan.getSpeed() 1, 1, 2, 0
Fan.setSpeed() 1, 1, 2, 0
FloorFan.Copy() 1, 9, 2, 6
FloorFan.Count() 11, 17, 3, 6
FloorFan.FloorFan() 1, 1, 2, 1
FloorFan.show() 1, 2, 2, 2
FluorescentLamp.Copy() 1, 9, 2, 6
FluorescentLamp.Count() 3, 5, 3, 2
FluorescentLamp.FluorescentLamp() 1, 1, 2, 1
FluorescentLamp.show() 1, 2, 2, 2
IncandescentLamp.Copy() 1, 9, 2, 6
IncandescentLamp.Count() 7, 9, 3, 4
IncandescentLamp.IncandescentLamp() 1, 1, 2, 1
IncandescentLamp.show() 1, 2, 2, 2
Input.a() 7, 10, 5, 12
Input.deepCopyArrayList() 2, 4, 3, 3
Input.getInputData() 4, 8, 4, 3
Input.parse() 30, 99, 9, 80
Lamp.getLux() 1, 1, 2, 0
Lamp.Lamp() 1, 2, 2, 1
Lamp.setLux() 1, 1, 2, 0
Line.Copy() 1, 10, 2, 7
Line.countI() 3, 9, 3, 7
Line.countR() 3, 9, 3, 4
Line.getDeviceArrayList() 1, 1, 2, 0
Line.getIsMain() 1, 1, 2, 0
Line.is() 3, 6, 4, 4
Line.setDeviceArrayList() 1, 1, 2, 0
Line.setIsMain() 1, 1, 2, 0
Main.b() 3, 4, 4, 1
Main.main() 11, 27, 7, 20
ParallelCircuits.Copy() 1, 9, 2, 6
ParallelCircuits.countI() 4, 14, 4, 8
ParallelCircuits.countR() 7, 17, 5, 6
ParallelCircuits.getDeviceArrayList() 1, 1, 2, 0
ParallelCircuits.is() 3, 6, 4, 4
ParallelCircuits.setDeviceArrayList() 1, 1, 2, 0
ReverseComparator.compare() 9, 23, 4, 6
ShiftSpeedController.change() 5, 4, 3, 2
ShiftSpeedController.Copy() 1, 9, 2, 6
ShiftSpeedController.getArr() 1, 1, 2, 0
ShiftSpeedController.getShift() 1, 1, 2, 0
ShiftSpeedController.setShift() 1, 1, 2, 0
ShiftSpeedController.ShiftSpeedController() 1, 2, 2, 1
ShiftSpeedController.show() 1, 1, 2, 1
ShiftSpeedController.SpeedRegulation() 1, 1, 2, 1
SpeedController.SpeedController() 1, 1, 2, 1
Switch.change() 3, 4, 3, 3
Switch.Copy() 1, 7, 2, 5
Switch.show() 3, 6, 3, 2
Switch.Switch() 1, 2, 2, 2
Switch.Switch() 1, 1, 2, 1


Block Depth Statements

0 21
1 118
2 238
3 59
4 42
5 53
6 22
7 5
8 10
9+ 4


改进建议

  1. 异常处理
    • input方法中,当用户输入end时,可能会导致scanner.nextLine抛出NoSuchElementException。可以在try-catch块中捕获该异常,并优雅地处理结束输入的情况。
    • 在解析输入数据的过程中,如果遇到格式不正确的行,可以抛出自定义的异常,并在main方法中捕获和处理该异常,而不是直接打印错误信息。
  2. 代码注释
    • 在关键代码段添加注释,解释其功能和逻辑。
    • 为类和方法添加文档注释,说明其作用、参数和返回值。
  3. 用户界面
    • 提供命令行选项,让用户可以指定输入文件和输出文件的路径。
    • 考虑添加一些简单的交互提示,例如提示用户输入end来结束输入。
  4. 数据验证
    • 在解析问题库和试卷时,检查题号是否重复。
    • 对于答案,检查其是否符合问题的类型(单选、多选、填空等)。
  5. 性能优化
    • 对于频繁使用的HashMap,可以考虑在创建时指定初始容量,以提高性能。
    • 如果需要处理大量数据,可以考虑使用BufferedReader来逐行读取输入文件,而不是一次性读取所有内容到内存中。
  6. 代码结构
    • 将不同类型的问题(单选、多选、填空)抽象为不同的类,继承自一个共同的父类,以提高代码的可读性和可维护性。
    • 将解析输入数据的逻辑提取到单独的类中,以减少代码的复杂度。
  7. 测试用例
    • 编写更多的测试用例,覆盖各种情况,包括边界情况和异常情况。
    • 使用测试框架(如JUnit)来自动化测试过程。
  8. 日志记录
    • 在关键位置添加日志记录,以便在出现问题时能够快速定位和解决。
    • 可以将日志输出到文件或控制台。
  9. 扩展性
    • 设计代码时考虑到未来可能的扩展,例如支持新的问题类型或文件格式。
    • 使用接口或抽象类来定义一些通用的功能,以便在需要时进行扩展。
  10. 代码风格
    • 遵循统一的代码风格,例如使用空格或制表符进行缩进、命名变量和方法时使用有意义的名称等。
    • 可以使用代码格式化工具来自动格式化代码,确保风格一致。

以下是一个简单的示例,展示了如何添加异常处理和日志记录:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;

class QuestionBase {
    // 其他代码不变
}

abstract class Question {
    // 其他代码不变
}

class SingleQuestion extends Question {
    // 其他代码不变
}

class GapFillQuestion extends Question {
    // 其他代码不变
}

class MulQuestion extends Question {
    // 其他代码不变
}

class QuestionInPaper {
    // 其他代码不变
}

class TextPaper {
    // 其他代码不变
}

class Answer {
    // 其他代码不变
}

class AnswerPaper implements Comparable<AnswerPaper> {
    // 其他代码不变
}

class Student {
    // 其他代码不变
}

class Parse {
    // 其他代码不变

    // 新增方法:处理输入异常
    public static ArrayList<String> input() {
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> stringArrayList = new ArrayList<>();

        try {
            while (true) {
                String str4 = scanner.nextLine();
                if (str4.equals("end")) {
                    break;
                }
                stringArrayList.add(str4);
            }
        } catch (Exception e) {
            // 处理异常情况,例如输入异常
            System.out.println("输入异常,请检查输入内容。");
        }

        return stringArrayList;
    }

    // 新增方法:记录日志
    public static void log(String message) {
        // 可以将日志输出到文件或控制台
        System.out.println("Log: " + message);
    }
}

class Show {
    // 其他代码不变
}

public class Main {
    public static void main(String[] args) {
        ArrayList<String> stringArrayList = Parse.input(); // 输入数据用 list 的方式保存

        HashMap<Integer, Question> questionHashMap = new HashMap<>(); // question.N question
        Parse parse = new Parse();
        questionHashMap = parse.Toquestionhashmap(stringArrayList);
        questionHashMap = parse.DeleteQuestion(questionHashMap, stringArrayList);
        HashMap<Integer, TextPaper> textPaperHashMap = parse.ToHashPaper(stringArrayList, questionHashMap);
        HashMap<String, Student> stringStudentHashMap = parse.ToStudentHashmap(stringArrayList);
        ArrayList<AnswerPaper> answerPaperArrayList = parse.ToAnswerpaperArraylist(stringArrayList, textPaperHashMap);
        ArrayList<TextPaper> textPaperArrayList = parse.TotextPaperArrayList(stringArrayList, questionHashMap);

        Show show = new Show();
        show.ShowWrongFormat(stringArrayList);
        show.ShowTextPaperScore(textPaperArrayList);
        Collections.sort(answerPaperArrayList);

        for (AnswerPaper answerPaper : answerPaperArrayList) {
            answerPaper = show.show1(answerPaper);
            show.show2(answerPaper, stringStudentHashMap);
        }
    }
}

在上述示例中,我们添加了一个input方法来处理输入异常,并使用log方法记录日志。这样可以提高代码的健壮性和可维护性。

标签:blog,java,定义,包含,show,23201115,邓俊豪,stringArrayList,Device
From: https://www.cnblogs.com/118djh/p/18240183

相关文章

  • 第二次blog
    一:前言第五次作业明显比之前的难了许多,大作业是模拟家居强电电路模拟程序,本次题目集只考虑了电路只为串联的情况,但是有多个开关接入电路,同时也有电压调节器。这次作业需要我们对电器实现继承关系,即所有的用电器都需要继承与电器这个父类。所给题目设计建议:1、电路设备类:描述所......
  • 第二次Blog
    引言第4次大作业第4次大作业相比前两次迭代,增加了多选题与填空题的判断,随着内容的增多,更看重代码的维护难易程度,因为前面某些测试点未通过,导致我多次尝试仍有二到三个测试点无法通过,因为代码量过大与设计的原因,导致我的代码维护难度过大,如问题类与题目类中某些方法的混淆使我的......
  • 第二次blog
    前言这三次pta大作业是我对java程序进行进一步的系统的训练。对我而言,在构建类图和考虑类与类之间的关系时显得尤为吃力。在这三次的pta大作业中我不断强化和训练我对类图构建方面的能力,也对其有了自己的认识。与此同时,我发现java程序编程的极为重要的一点就是对整体的把握,老师十......
  • OOP第二次blog
    不知不觉过去了这么久,又经历了三轮的PTA作业,到了写blog小结的时间,接下来给大家分析的第二次的PTA作业。本次作业分为以下部分:(1)总结三次题目集的知识点、题量、难度等情况。(2)设计与分析:重点对题目的提交源码进行分析。(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结。(4......
  • 4~6总结blog
    第四次:一.介绍:相比于前三次,这一次也有一定的迭代,但是仍然有五个测试点未通过,接下来重点展示二.类图:三.耦合度:在这个耦合度方面,Answer类的OCavg:4.36,Main类的OCavg:40.00Answer类的WMC:48,Main类的WMC:40在软件工程中,OCavg和WMC是两个与代码复杂性相关的度量指标。OCavg表示每......
  • 第二次Blog
    1.前言第四次作业是前三次大作业的迭代,添加了选择题,多选题,填空题。多选题,填空题可以有多个答案,并且可以对一半并得到分数。这对输入是个考验。同时对比较答案也是个难题。第五次作业是设计一个智能家居强电电路模拟系统,有受控设备和控制设备,不算太难。第六次作业是第五次作业迭代......
  • 第二次Blog
    题目集47-17-4答题判题程序-4分数87作者蔡轲单位南昌航空大学设计实现答题程序,模拟一个小型的测试,要求输入题目信息、试卷信息、答题信息、学生信息、删除题目信息,根据输入题目信息中的标准答案判断答题的结果。本题在答题判题程序-3基础上新增的内容统一附加在输出格式......
  • 题目集4-6的总结性blog
    前言:在这三周java的练习中,又运用了很多知识点,正则表达式,类与对象之间的关系,类与类之间的关系,继承,多态等等,巩固了上次学习的知识并掌握了新的技巧,这轮学习让我意识到,java题目需要先构思再实践,很多复杂的类之间联系,不构思好就去写代码,就会浪费很多时间。第四次大作业:这个题目是对......
  • 题目集4~6的总结性Blog
    第二次Blog是对第二类大作业的总结前言:前三次题目集的题量不会很大,提出的引脚我是第一次正式这种问题,有点陌生。难度偏小,虽然我没有拿满,老师还把后面的迭代方向告诉了我们,也更方便我们的设计,这一次对我来说应该是一次突破,因为我从未有一次如此清楚我代码的结构和问题,但我也有一......
  • 第二次Blog总结
    一、前言经过题目集4至题目集6的学习与实践,我深刻体会到了面向对象编程(OOP)的魅力与挑战。本次总结将重点围绕三次题目集中的7-1题目,从知识点、题量、难度等方面进行分析与总结。知识点题目集4至6中的7-1题目,无一不紧扣面向对象编程(OOP)的核心概念。这些题目不仅深入探索了类的继......