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

23201115-邓俊豪-第三次blog

时间:2024-06-30 18:08:55浏览次数:14  
标签:blog 定义 show 调速器 23201115 邓俊豪 Switch 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. 深度复制: 复制之后的对象有一个新的地址

设计与分析

pta-7

一、项目简介

本文将介绍如何使用 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-8

一、项目简介

本文将介绍如何使用 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,定义,show,调速器,23201115,邓俊豪,Switch,Device,设备
From: https://www.cnblogs.com/118djh/p/18276762

相关文章

  • PTA题目集7~8的总结性Blog
    前言:对于我这种水平的学生来说本次的7-8次PTA的难度之大令我无从下手,况且之前的第6次PTA就已经让我望而止步了,更别提这两次在第6次PTA题目集之上再次进行迭代的题目了。再加上面临的期末周,大量学科等着我去复习,以至于没时间去钻磨PTA的改动,哭死,连老师都说单单是第8次题目集的题目......
  • 第三次blog
    一:前言这是最后一次大作业了,本次大作业让我感觉到难度很大,同时让我也学会了不少东西。学会了如何采用面对对象程序设计,更好的满足对象的需求,使得代码的功能性更强,同时使代码更加严谨,有效。智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音......
  • PTA题目集7~8总结性Blog
    (1)前言题目集7,8主要涉及以下知识点,Java是一种面向对象的编程语言,需要理解类和对象的概念,如何设计和实现各种设备的类。设计控制设备类和受控设备类,理解如何通过类和对象来模拟真实世界中的设备和其行为。通过继承和多态实现设备之间的关系和行为的多样化。例如,可以将不同类型的......
  • 2024年6月16日 18:10,cnblog博客园的第一天!!!
    终于A了P06614迷宫游戏5,原来是动态规划......点击查看代码#include<bits/stdc++.h>#definedebug(a);cout<<#a<<"="<<a<<endl;#definerep(i,a,b)for(inti=a;i<=b;i++)#definepep(i,a,b)for(inti=a;i>=b;i--)usingnamespacestd;......
  • Vulhub WebLogic漏洞复现
    目录前言任意文件上传漏洞(CVE-2018-2894)管理控制台未授权RCE漏洞(CVE-2020-14882&CVE-2020-14883)未授权RCE漏洞(CVE-2023-21839)SSRF漏洞(CVE-2014-4210)前言前面两篇针对WebLogic存在的XMLDecoder和T3协议反序列化漏洞进行了分析和复现,这里继续借助vulhub来复现WebLogic的其他漏洞......
  • 【护网必备】外网打点必备-WeblogicTool
    项目介绍迫于目前现有的weblogic工具没怎么更新、payloayjdk适用版本等问题,所以基于superman18、sp4zcmd等项目,写一个weblogic工具,工具运行版本要求jdk8(深信服深蓝实验室天威战队强力驱动)支持漏洞CVE-2023-21931(JNDI)CVE-2023-21839(JNDI)CVE-2020-2551(JRMP)CVE-2020-2551......
  • WebLogic XMLDecoder反序列化漏洞
    目录前言XMLDecoder概述XMLDecoder反序列化漏洞漏洞复现前言上篇复现了T3反序列化漏洞,XMLDecoder反序列化在WebLogic中也是一类影响很大的反序化漏洞。XMLDecoder概述XMLDecoder是JDK自带的以SAX方式解析xml的类,实现java对象和xml文件之间的转化。其中序列化过程是将java对象......
  • 第二次blog
    一、前言 题目集4总共包含三道题目,题量适中。其中第一题的要求是对完善前面三个题目集中的答题判题程序。其中包括了字符串处理数据结构的使用、文件输入输出、输入输出格式处理、错误处理与异常处理等知识点。我认为本题题目较难,因为本题目涉及多个输入输出格式和数据处理逻辑......
  • Blog_2
    前言知识点1.前三次大作业之后,学习到继承这一特征,第四次大作业开始使用继承了,但基础的数据存储结构我使用的还是HashMap,这个还是使用得比较得心应手。这道题中正则表达式的使用是最多的,因为有错误匹配以及多种信息提取的需要。2.第五次大作业除继承外,还使用了多态这一特征。......
  • 23201826-熊锋-第二次blog
    一.前言这三次pta作业第一次为答题判断程序-4,这是答题判断程序的第三次迭代,相较于答题判断三,新增了各种题型及其不同种类的答案,并且出现多选题,使得这次题目相当棘手,具有很大的挑战性。第二次为家居强电电路模拟程序-1,这次是新题型,这道题难点在于电器之间的连接,电路是否为通路,电器......