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

题目集4~6的总结性Blog

时间:2024-06-06 19:11:13浏览次数:13  
标签:串联 总结性 题目 代码 class Blog 电路 device public

4~6次大作业总结

前言

在题目的开始设计好类和结构真的很重要,之前一直上来就开始写,后来就变得吃力,这样不能很好的一次性完成代码,发现应该先设计,在着手编写代码之前,可以先绘制类图,明确每个类的属性和方法,以及它们之间的关系。这有助于构建清晰的代码结构和逻辑,避免在编码过程中陷入混乱。
也发现了每个类单一职责,这有助于代码的模块化和解耦,提高代码的灵活性和可维护性。将主函数保持简短和清晰,只包含必要的代码逻辑,避免过多繁琐的操作和计算。主函数应该主要负责程序的启动和控制流程的引导,具体的业务逻辑应该封装在各个类的方法中完,让代码更条理清晰,也便于之后的修改迭代。如果都交织在一起,那可就真是剪不断理还乱了。主函数太过冗长也不是java应该有的特点,要记得java是面向对象。

第四次大作业
1.知识点
在处理错误情况时,针对不同类型的错误,可以采取不同的处理方式,选择题和多选题,需要检查学生的答案是否在规定的选项范围内,并且需要考虑部分正确的情况。可以根据题目的要求和答案的匹配程度给予不同的分数。填空题是根据填写的答案与标准答案的匹配程度来确定的。可以使用字符串匹配算法来比较学生填写的答案和标准答案之间的相似度,并根据相似度给予不同的分数。对于多个学生多个试卷的情况,需要分别处理每个学生的试卷,并将每个学生的成绩记录下来。可以使用循环来处理每个学生的试卷,并使用数据结构来存储每个学生的成绩信息。
7-4 答题判题程序-4
部分正确给分判定,在满足一定条件下对分数进行处理并输出,根据题目的状态和正确与否来计算得分。其中包含了对题目是否存在、是否被删除以及是否为正确答案的判断逻辑。通过逐步解析条件并执行相应的操作

if (judge2)//部分正确
                         {           if(!deletes.contains(question.getNu                          mber())&&!(question.getNumber()>=100))//题目存在,且没被删除
                             { 
                                int judge3 = questionscore.get(i)/2;
                                totalScore=totalScore+judge3;
                                   if(k==paperquestion.size())
                                System.out.print(judge3);
                                   else
                                  System.out.print(judge3+" ");//
                             }
                             else
                             {
                                  totalScore=totalScore+0;
                                     if(k==paperquestion.size())
                                      System.out.print("0");
                                     else
                                      System.out.print("0 ");//
                             }
                             
                         } else {//含错误答案
                            totalScore=totalScore+0;
                          if(k==paperquestion.size())
                           System.out.print("0");
                          else
                           System.out.print("0 ");//
                         }

第五次大作业
知识点
要考虑到它们之间的关系以及如何利用多态性。比如,在设计电路的模型时,可以创建一个抽象的电路类作为父类,然后创建不同类型的子类来表示具体的电路组件,如串联电路和并联电路。通过继承和多态,可以实现对不同类型电路的统一管理和操作。对输入数据的处理需要考虑到数据的合法性和格式化。对串联电路的连接可以采用链式连接的方式。即将多个电路组件按顺序连接起来,形成一个完整的串联电路。在保留整数部分时,可以使用取整函数或者字符串处理方法来实现。可以使用排序算法对数据进行排序
7-5 家居强电电路模拟程序-1
部分截取代码

class Device {
    String id; // 设备标识符
    int num;//序号
  double pin1Voltage; // 输入引脚电压
    double pin2Voltage; // 输出引脚电压

    // 构造函数
    public Device(String id) {
        
    }

    // 更新设备状态
    public void updateState() {
        // 根据输入引脚电压更新设备状态
    }

    // 输出设备状态
    public void printState() {
        // 输出设备状态
    }
   
}

// 开关类
class Switch extends Device {
    boolean state; // 开关状态,true为1,false为0

    // 构造函数
    public Switch(String id) {
        super(id);
        this.state = false; // 默认为关闭状态
    }

    // 切换开关状态
    public void toggle() {
        this.state = !this.state;
    }

    // 更新设备状态
    @Override
    public void updateState() {
        if (state) {
            this.pin2Voltage = this.pin1Voltage;
        } else {
            this.pin2Voltage = 0;
        }
    }
     public double getOutV() {//返回输出电压
        return state ? pin1Voltage : 0;
    }
}

// 分档调速器类
class SpeedController extends Device {
    
}

// 连续调速器类
class ContinuousSpeedController extends Device {
    
}

// 灯类
class Light extends Device {
    
}

// 风扇类
class Fan extends Device {
   
}
  class WhiteLight extends Light//白炽灯
       {
     
    	  
       }
       class SunLight extends Light//日光灯
       {
          
    	   
       }
       class CeilingFan extends Fan//吊扇
       {
           
       }

public static void input(String line) {
// 解析输入信息并执行相应操作

         if (line.startsWith("[")) {
            String[] pats = line.substring(1, line.length() - 1).split(" ");//去除【】和根据空格分开

            switch (pats[1].charAt(0)) {
                case 'K': {
                    String id = pats[1].substring(0, 2);
                    Switch K =new Switch(id);
                    K.setPin1Voltage(220.0);
                    devices.add(K);
                    break;
                }
               .........


        } else if (line.startsWith("#")) {

            // 调节设备状态
            switch (line.charAt(1)) {
                case 'K': {
                    String id = line.substring(1, 3);
                    for (Device device : devices) {
                        if (device instanceof Switch) {
                            if (device.id.equals(id)) {
                                Switch subDevice = (Switch) device;
                                subDevice.toggle();// 对子类进行修改
                            }
                        }
                    }
                    break;

                } 
                ......


        }
    }

这是一些主要的类,包括设备父类,开关子类,调速器子类和一些用电器类及其相应函数。
还有输入部分的函数,判断这一行的开头是什么标志,分情况进行后续的操作,将信息存入或是别的操作。不过我认为这里太长太复杂了,还需进一步修改。

第六次大作业
知识点
在设计电路模型时,将每个用电器的电阻通过计算得出电势差。串联电路中,多个电路组件按顺序连接,形成一个链式结构。可以设计一个串联电路类,用于管理和连接多个电路组件。通过重写连接方法,实现将多个电路组件串联起来,形成一个完整的串联电路模型
为了实现多个串联电路组成的并联电路,并联电路类,其中包含多个串联电路作为子组件。
7-6 家居强电电路模拟程序-2
有了串联并联,就不得不新增电路类,串联类,并联类。将电路看做一个元件,用电器。通过引入电路、串联电路和并联电路的类,可以更好地建模和模拟复杂电路系统,可以使代码更具扩展性和灵活性。以下是部分删减代码

class Circuit{//电路设备
	 double i;//电流
	double diff;//电压差
	 double r;//电阻
	 boolean state=false;//开关闭合状态
	public Circuit()
	{
		
    }
}
class SeriesCircuit extends Circuit{//串联电路
	 List<Device> devices;
     public SeriesCircuit() {
        devices = new ArrayList<>();
        this.diff=0.0;
    }

  

public void addDevices(Device device){ //将设备添入串联带路
    this.devices.add(device);
}
public void addr(double r)
{
	this.r=this.r+r;
}

public void judgestate(){ //计算是否子串电路是否闭合
    int a=1;
    for(Device device : devices) {
        if (device instanceof Switch) {
            Switch Devicess = (Switch) device;
            if (!Devicess.state) {
                a = 0;
            }
        }
        if(device instanceof SpeedController){
            SpeedController Devicess = (SpeedController) device;
            if(Devicess.currentLevel==0)
                a=0;
        }
        if(device instanceof ContinuousSpeedController){
            ContinuousSpeedController Devicess = (ContinuousSpeedController) device;
            if(Devicess.position==0.0) {
                a = 0;
            }
          }
    }
    int b=0;
    for(Device device : devices) { //判断串联电路中是否含有控制设备,如果不含则也是true
       if(device instanceof Switch||device instanceof SpeedController||device instanceof ContinuousSpeedController) {
           b=1;
       }
    }
      if (a == 1){
            this.setstate(true);
      }
      if (b == 0){
        this.setstate(true);
      }
}
    public void connectDevices() {//连接元件
        for (int i = 1; i < devices.size(); i++) {
            Device device1 = devices.get(i - 1);
            Device device2 = devices.get(i);
          //  device2.voltage = device1.voltage;
        }
    }
   
    
}

class ParallelCircuit extends Circuit{//并联电路
	 List<SeriesCircuit> seriesCircuits;//并联中串联
     public ParallelCircuit() {
        seriesCircuits = new ArrayList<>();
    }

public void setV(){
    for(SeriesCircuit series:seriesCircuits){
        series.setdiff(this.diff);
    }
}//并联电路电压相等
    public void addseriesCircuit(SeriesCircuit seriesCircuit) {//加入串联电路
        seriesCircuits.add(seriesCircuit);
    }
    public double getr(){
        double r=0.0;
       for(SeriesCircuit series:seriesCircuits){
           series.judgestate();
           if(series.state){
               r=r+(1/series.r);
           }
       }
        this.r=1/r;
        return this.r;//并联的总电阻
    }//
}

设计与分析

7-4 答题判题程序-4

作为第一次大作业的最后一次迭代,难度自然是不必说,新增了选择题和填空题两种题型,尤其是多选题和填空题,有部分正确的判分方式,和之前非对即错的不同,需要加入新的判断。

7-5 家居强电电路模拟程序-1

又是一次全新的大作业,以智能家居为背景,要为后面的迭代打下基础就要设计好类,每个类的功能单一,简单。对大体格局要求较高

7-6 家居强电电路模拟程序-2

增加了并联电路,并联由多个串联组成,根据电阻和串并联特性计算电压,这次的输入和之前大有不同,需要做许多修改

踩坑心得

  1. 在源码提交过程中遇到编译错误和字段不可见等问题,这提示了我们在编写代码时要注意访问权限的设置。合理的访问权限能够保护代码的安全性和封装性,防止未经授权的访问和修改。通过合理地使用 private、protected、public 等关键字来控制字段和方法的可见性,可以有效地避免类成员被误用或者篡改,有助于提高代码的健壮性和可维护性。

  2. 输入信息处理不当很可能引发意想不到的错误,比如导致函数返回非零值而后续代码无法执行。为了避免这种问题,需要对输入数据进行有效的验证和处理。在处理用户输入时,应该考虑各种可能的情况,并采取适当的措施来确保数据的完整性和准确性。对于可能导致非零返回的情况,可以通过添加适当的异常处理或错误检测机制来及时发现和处理问题,从而确保代码的正常执行。

  3. 函数计算错误可能导致程序逻辑出现偏差,进而影响到答案的正确在。在处理设备状态或用电器控制时,如果函数计算错误可能导致用电器状态不正确。为了避免这种问题,需要对涉及到设备状态的函数进行仔细检查和验证,确保函数逻辑正确并输出正确的结果。

点击查看代码
 class WhiteLight extends Light//白炽灯
       {
     
    	   public WhiteLight(String id)
    	   {
    		   super(id);
    	   }
    	   public int getbright()
    	   {
    		   if (pin1Voltage < 10.0) {
            return 0;
        } else if (pin1Voltage <= 220.0) {

            return (int)( (15.0/21.0)*pin1Voltage+(900.0/21.0) ); // 按比例计算亮度
        } else {
            return 200; // 超过220V亮度为最大值200lux
        }
    	   }
    	   
       }

改进建议
简化主函数,主函数太过冗长会导致后续的修改十分不方便,建议将个各类分工明确,尽量减少在住函数中进行大量计算
在设计类和字段时要考虑良好的封装性,避免字段不可见等问题的出现。建议合理使用访问修饰符,将字段设置为私有(private)并通过公有(public)方法来访问,从而保证良好的封装性,提高代码的可维护性和安全性。
过本阶段的三次题目集,我学会了在编码过程中如何处理编译错误和访问权限等问题,也学会了如何通过逐步调试和修改代码来解决这些问题。在以后的学习中,我需要进一步加强对Java编程语言的理解,尤其是关于面向对象编程中封装、继承和多态等概念的学习。此外,我也需要更多地练习编程,提升自己的编程能力。
总结
仔细审查错误信息:对于每一个编译错误或异常信息,都要仔细阅读并理解其含义。错误信息通常会指出出错的位置以及可能的原因,因此要耐心地一步步解决问题。
强调代码质量:在编写代码时,要注意语法规范、命名规范和代码风格,这有助于减少出现错误的可能性。另外,及时进行代码审查和测试也是确保代码质量的重要手段。
要逐步尝试脱离测试点提示,靠自己思考得出测试点,为以后工作打下基础
考虑到大作业的迭代性质,在第一次写的时候就要考虑到后面的变化,尽可能的少量修改代码,避免每一次做大量改动

标签:串联,总结性,题目,代码,class,Blog,电路,device,public
From: https://www.cnblogs.com/orangecookie/p/18228493

相关文章

  • 2024最新华为OD算法题目
    在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网。请你统计机房中最大的局域网包含的服务器个数。输入描述第一行输入两个正整数,n和m,0<n,m<=......
  • 2道寻找回文子串的题目
    题目题目1题目2题目1是将字符串分隔,使得分隔后得到的每个字符串都是回文子串题目2是从字符串里面找到回文子串两道题都可以利用递归来解决//利用双指针判断是否是回文子串boolisre(string&s){ intleft=0; intright-s.size()-1; while(left<=right) {......
  • oop-PTA题目集4~6总结
    一、前言   相比于前三次的题目集,题目集4~6需要用到的新的知识点主要是面向对象程序设计中继承和多态这两个特性的使用。第四次题目集中的答题判题程序-4是在前三次程序的基础上增加新的内容,新增了选择题和填空题两种题型,这一变化的处理需要用到前三次未使用的继承,即将题目......
  • 2种方法解决需要clik点击数的题目——[HNCTF 2022 WEEK2]getflag 137分 MFC patch RE
    题目   DIEIDA找到判断点击数的if,我们修改一下汇编指令让点击数<99999999就成立这个程序没有要求我们输入,说明flag是程序打印的IDA动调 下一个断点修改 得到flag  还有一种更快的方法——CheatEngine 随便点击几次 在CE中修改点击次数 Getf......
  • Android课程设计课题题目推荐(安卓期末大作业,毕业设计,Androidstudio)
    博主介绍:本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;......
  • C++课程设计杭电题目(中)
    2073.无限的路题目描述http://acm.hdu.edu.cn/showproblem.php?pid=2073http://acm.hdu.edu.cn/showproblem.php?pid=2073ProblemDescription甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形:......
  • Centos7下安装weblogic
    一、Weblogic安装包下载Weblogic下载地址:https://www.oracle.com/cn/middleware/technologies/fusionmiddleware-downloads.html 二、安装JDKWeblogic需要依赖于JDK#解压jdk压缩包,将文件夹重命名为jdk1.8tarzxfjdk-8-linux-x64.tar.gz-C/opt/cd/optmvjdk1.8......
  • weblogic使用过程中的部分报错与解决方案
     引用:https://www.cnblogs.com/jeff-z-blog/p/9534591.html报错一:vim中E212:无法打开并写入文件编写配置文件时,常常忘记切换到root用户,导致文件编辑完毕,敲入:wq退出保存时,出现E212:无法打开并写入文件的错误提示。这是由于在该目录下当前用户没有写权限导致,修改该文件的权限即......
  • blog2 4--6周PTA训练总结
    一.前言经过了第二轮4-6周的面向对象程序设计的学习,我对于这门课程的理解又更进一步。如同老师所说的,这门课程学下来,你会发现真正困难的从来不是敲代码的部分,而应当时设计的部分。在看到一道题之后第一时间想到不再是直接写代码,而是认真的反复查阅,构思一幅逻辑完整且正确的类图,它......
  • Trie字典树和AC自动机 (题目&答案)
    A.三年二班的投票题目描述三年级二班已经完成了竞选班长的投票,已知一共有n张投票,每张投票上写了一位同学的名字。投票统计结束后,张老师随意问一个同学的名字,请编程快速检索出,该同学共有几票。输入第一行读入一个整数n,代表产生了n张投票。(n≤)接下来n行,每行有一......