题目集7~8

news/2024/10/6 3:53:35/文章来源:https://www.cnblogs.com/oop-blog/p/18287575

由于个人原因,最后两次题目集未提交,对自己的放纵感到愧疚,后期的补练我也会抽出时间完成这两道题
经过分析,题目集7,是在前面的基础上加上了一个新概念:互斥开关,以及模拟一种受控窗帘,
在我的想法,互斥开关便可当作两个普通开关去完成电路,窗帘则是新增一个用电器。
题目集8,有以下新增内容:
1)增加管脚电压的显示
在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。(格式详见输出信息部分)
2)电流限制
电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。
本题各类电器的最大限定电流如下:
开关20、分档调速器18、连续调速器18、白炽灯9、日光灯5、吊扇12、落地扇14、互斥开关20、受控窗帘12、二极管8。
3)短路检测
如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”
4)并联电路中包含并联
本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。例如如下输入的电路,并联电路M2的其中一条串联电路T4中包含了另一条并联电路M1:

T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]

T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]

M1:[T1 T2]

T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]

T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]

M2:[T4 T5]

5)二极管
增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。
图2 二极管符号
二极管的标识符为’P’,左侧管脚编号为1,右侧管脚编号为2。
二极管如果两端电压相等,没有电流流过,分以下两种情况输出:
1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。
2、如果两端电压不为0,二极管导通。

以下分析题目集1~3最后一题
第一次
知识点:类的应用,类与类之间的关系,题量:5,难度:中等
要求实现一个判题程序,输入题号,题目,和答卷,根据题目后面接着的标准答案和给出的答卷的提交答案进行比较,最终输出答题情况和对错。总体比较简单,通过主函数输入信息,进行存储题目信息在试卷类,

我有一点未作完善,我的试卷类只能存储一个题目,答卷类是比较试卷类中的那一道题目和标准答案的正确情况,输出最后的格式。这一次的题目虽然简单,但是对后面的迭代有着比较重大的意义,每次一都是在这
一次的基础下进行修改。****
类图:

耦合度:

第一次作业比较简单,考虑的情况也比较少。
第二次
知识点:类的应用,类与类之间的关系,ArrayList的使用,题量:4,难度:稍难
要求实现一个更加完善的判题程序,这一次相比于上一次的难点在于,要求输入内容有题目信息和标准答案,试卷题目和对应的分数,答题信息,在上一次的基础上迭代,题目稍微难,这一次我稍作修改,根据在主
函数输入的信息中识别内容,进行相应位置的存储,一张试卷存放着该试卷的全部题目,一张答卷存放着对应试卷号和该试卷题目的提交答案,进行一一比较了,输出格式也稍微有所改动,首先输出该试卷总分是否
为100分,其次依次输出试卷的答题情况和总分,如果答案信息中试卷的编号找不到,则输出”the test paper number does not exist”,如果输入的答案信息少于试卷的题目数量,答案的题目要输"answer is
null"。最后我通过修改,任然有一个测试点未通过
类图:

耦合度:

这次作业类的关系相比于上一次更为复杂
第三次
知识点:类的应用,类与类之间的关系,ArrayList的使用,题量:3,难度:困难
在第二次的基础上加以迭代,实现一个更加完美的判题程序,要求输入内容有题目信息和标准答案,试卷题目和对应的分数,答题信息,以及学生信息,题目稍难,这一次我基于第二次的方法,依旧使用ArrayLst,
在主函数中输入信息并识别,另加了一个小功能,就是可实现对题库中的题目进行删除功能,接着要判断输入信息是否合法,并输出相应提示,接着进行相应位置的存储,一张试卷存放着该试卷的全部题目,一张答
卷存放着对应试卷号和该试卷题目的提交答案,进行一一比较,输出格式与第二次相差不大,首先输出那部分格式错误,再而输出该试卷总分是否为100分,不同就是在输出得分前加上该答卷的学生学号和姓名,删
除题目信息为独行输入,每一行为一条删除信息,多条删除信息可分多行输入。该信息用于删除一道题目信息,题目被删除之后,引用该题目的试卷依然有效,但被删除的题目将以0分计,同时在输出答案时,题目
内容与答案改为一条失效提示,例如:”the question 2 invalid~0”,试卷错误地引用了一道不存在题号的试题,在输出学生答案时,提示”non-existent question~”加答案,输入信息只要不符合格式要求,
均输出”wrong format:”+信息内容,如果答卷信息中试卷的编号找不到,则输出”the test paper number does not exist”,答卷中的答案不用输出,但最终还有奖金五个测试点未通过
类图:

耦合度:

这一次比较难,类的个数也比较多,关系也复杂
三.踩坑心得:
一.第一次大作业我是输入一个识别一个,当时这个方法是可行的,到了第二次我的脑子任然是想着这个方法,但是后面写着写着看到了题目说了一句话:输入顺序不确定,我便放弃了这样的解决方式,后面我的解决方法是将内容一次性以一行一行的字符串输入存入到一个字符串数组中,再后来我将输入的内容存入到了元素为String的ArrayList里面,下面是我的展示:
第一次:

第二次:

第三次:

二.就是第三次作业的判断输入的内容是否合法,我的做法是先切分后使用用正则表达式,这里不做过多讲解,举出一例当作样例即可:
这是一个判断输入的题目是否合法的代码:

测试结果如下,
输入:

N:1 #Q:1+1= #:2(本应该为#N:1 #Q:1+1= #A:2)

T:1 1-5

X:20201103 Tom

S:1 20201103 #A:1-5

end
输出:

三.类似于输入试卷信息的格式,有很多部分是格式相同的,例如:#T:1 1-5 2-8,除了#T:之外,都是"题号-分数"的格式,这个判断格式是否正确的放我我也做了思考,我不知道我的是否为最优解,所以我也打算拿
出那展示,后面看看同学的是否有更优解,加以学习。
这是一段判断输入试卷是否合法的代码:
//输入试卷
for(int k=0;k<content.size();k++){
for(i=0;i<content.size();i++) {
if (content.get(i).startsWith("#T:")){
String[] parts = content.get(i).split("\s+");
j++;
int Paper_num = Integer.parseInt(parts[0].substring(3));
if(Paper_num == j){
Paper paper = new Paper(Paper_num);

                int flag1=1;for (int l = 1; l < parts.length; l++) {String regex = "^\\d+-\\d+";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(parts[l]);if(!matcher.matches()){System.out.println("wrong format:" + content.get(i));flag1=0;break;}}if (flag1==1) {for (int l = 1; l < parts.length; l++) {String[] questionPart = parts[l].split("-");int questionNumber = Integer.parseInt(questionPart[0]);int flag=0;for(int x = 0;x<questions.size();x++){if(questions.get(x).getNum() ==questionNumber){flag=1;paper.addQuestions(questions.get(x));break;}}if(flag==0){paper.addQuestions(new Question(0,questionNumber,null,null));}int score = Integer.parseInt(questionPart[1]);paper.addQuestionScore(score);}papers.add(paper);}}}}
}

测试结果如下:
输入:

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

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

T:1 1-5 3~8(正确格式为:#T:1 1-5 3-8)

X:20201103 Tom-20201104 Jack-20201105 Www

S:1 20201103 #A:1-5 #A:2-4

D:N-2

end
输出:

四.改进建议
我的建议是我在我的类的内容进行改进,题目类有题目类的方法,试卷类哟试卷类的方法,答卷类有答卷类的方法,试卷类还是存放这相应的题目,答卷类存放对应试卷的题目编号和学生写的答案,其内部有判题方法对答案进行判断是否正确,更加完善单一职责,在原来的题目基础上进行深一步的迭代。
五。总结:
在三次大作下来,我也学到了很多知识,明白了我们软件工程不容易,既来之则安之,我也要更加努力学习,通过一次次的作业不断提升自我。在本次阶段的大作业,我一次一次对代码进行改善,当然也是一次一次的学习,找出最优的解决方法,
建议和意见:
一.题目:对不友好的一点我觉得就是测试点问题,我们都知道未来遇到很多问题可能并不会给出我们问题所在,也不会明确告诉我们测试点,提交答案的提示很多测试点都是一样的提示,很多同学在测了很久很久才写
出来,甚至可能都还没写出,但这并不是我们不会,也不是因为题目很难,也不是因为我们实现不了哪些功能,而是测试点都是出题方的主观因素,导致我们并没有想法往那个方向思考,我也相信学院在接下来的培养我们,我们也能更加进一步提升自身能力和水平。
二.课程,实验等方面:
对学校的教学方式很满意,学生通过课前看发布的视频,先一步了解,提升了我们的自学能力(很重要),实验课也能帮助我们解决心中的问题,教师也很好,有的同学因为学习能力偏差,在大作业稍微有点吃力,老
师能很认真的和他们交谈,我觉得很好,在课上和课下,老师很认真的讲课,出一些课堂练习给我们当场练习,然后讲解,也会对大作业进行讲解,课后也会认真在QQ给我们解答问题。
自我加以改进:
1.对自己出现的bug加以分析其原因,在写代码之前分析好类关系图。
2.学习新知识,简化代码,完善单一职责
3.对前三次的未通过的测试点加以分析,在下一次攻克难题

最后也对自己后期的学习态度感到愧疚

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/739442.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议…

4、flask-项目拆分

项目的拆分其实就是将app.py中的工作拆分开来、类似Django一样、每个项目都把路由模板和试图函数分开写 app.py # 路由 + 视图函数from flask import Blueprint from models import *#蓝图 # 创建蓝图对象 # 第一个参数:蓝图的名字 # 第二个参数:蓝图的包名 blue = Blueprin…

2-SAT 问题

2-SAT 问题 模型有 \(n\) 个布尔类型的变量 \(x_1, x_2, \ldots, x_n\),有 \(m\) 条限制形如 \(x_i \space [\operatorname{or}/\operatorname{and}]\space x_j=[1/0]\). 求一组符合要求的解。核心问题只需要考虑有没有解。 对于每个变量都只有两种取值:\(0/1\),那么把每…

坚果云与floccus实现Chrome书签国内跨设备、跨平台同步

本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作~本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作。在工作与学习中,我们时常希望在不同浏览器之间实现书签的同步;而一些传统的浏览器书签同步方…

性能监控调优

1.命令行工具 1.1 jps 查看系统JVM进程 jps [options] [hostid]optionhostid:省略则本机,监控远程需要安装jstatd1.2 jstat 查看JVM统计信息 jstat -[-t] [-h] [[]]option-t:加程序运行时间 [-h]:输出设定行数加表头信息 :查询间隔时间 count:查询总次数 结果:当ou上涨趋…

【第7个渗透靶机项目】 DerpNStink

Hack it 信息搜集 发现主机 nmap 192.168.0.17 -sS -sV -A -T5 全面扫描一下,有点有用信息访问一下但是没有用。 访问一下http服务查看源代码,发现有文件泄露下面还有个flag查看info.txt。<-- @stinky,确保使用本地 dns 更新您的主机文件,以便可以在新的 derpnstink 博客…

Linux运维工程师推荐学习的开发语言

前言:会开发的运维和不会开发的运维可以说是两个世界的运维。 个人推荐python和go,前者可以做自动化运维,后者可以深挖k8s;最近就不先演示运维服务技术的部署和架构搭建了,在深挖自动化运维,为了让现在的工作更加高效和便捷。如果有需要了解的运维服务技术,可以评论说出…

2、flask-run启动参数详解

app.py 这里 app.run(True, port=5001, host=0.0.0.0) from flask import Flask#创建flask应用对象 app = Flask(__name__)@app.route(/) # 路由 def hello_world(): # 视图函数return Hello World! # 响应给前端#添加路由和视图函数 @app.route(/index/) def index():…

从零学习的JAVAday1~day7

作为一个刚要迈入大二的预备程序员,已经学习过了c语言和c++的部分知识,在暑假期间满怀期待的开始Java的学习,希望一个暑假可以对Java的了解加深一些。 学习Java首先要学习windows电脑的cmd命令: 同时点击键盘上面的win+r键输入cmd即可进入默认的cmd面版,然后我们就可以输入…

面试官:Java线程可以无限创建吗?

哈喽,大家好🎉,我是世杰。 ⏩本次给大家介绍一下操作系统线程和Java的线程以及二者的关联1. 面试连环callJava线程可以无限创建吗? Java线程和操作系统线程有什么关联? 操作系统为什么要区分内核态和用户态?⏩要想解答这些问题,我们要先从操作系统线程开始说起,让我们…

标准IO与系统IO

C平台的标准IO(可跨系统)Linux 系统IO (Linux系统平台才能使用)Linux系统的IO(输入输出)特点主要包括以下几个方面 1)文件视为一切:在Linux中,几乎所有的设备和资源都被视为文件。这意味着无论是硬件设备(如磁盘、网络接口)还是系统资源(如进程、内存),它们都可以通…

比snipaste更好用的截图工具 pixpin

pixpin官网功能介绍与 snipaste 的功能相似,比snipaste好用作者:mohistH 出处:https://www.cnblogs.com/pandamohist/ 本文版权归作者和博客园共有,谢绝一切形式的转载,否则将追究法律责任。