java第4-6次题目集blog
1.前言
本次blog主要是题目集4-6的总和,主要分析每次题目集中的最后一题,答题判断程序,每次最后一题难度增加。
题目集4
知识点:类和对象的使用,继承,正则表达式,HashMap<>,LinkedHashMap<>,List<>数据结构。
题量:题目数为3题。
难度:前面2题简单,最后一题难度增加。
题目集5
知识点:抽象类的使用,继承,正则表达式,Map<>,二维数组
题量:题目数为3题。
难度:后面2题简单,第一题难度增加。
题目集6
知识点:抽象类的使用,继承,正则表达式,Map<>,二维数组,List<>等
题量:题目数为1题。
难度:难度在上一次基础上增加。
2.设计与分析
答题判题程序-4
答题判题程序-4是一个模拟答题和判题的系统,它能够处理包括选择题、填空题在内的多种题型,并支持多张试卷的管理。该程序在答题判题程序-3的基础上进行了扩展,增加了对选择题和填空题的支持,以及对多张试卷的处理。
类和对象设计
Quiz 类
属性:题目编号(id)、题目描述(description)、标准答案(solution)
方法:
构造函数:初始化题目的属性。
matchAnswer:判断给定的答案是否与标准答案匹配。
getResult:获取题目的判题结果和得分。
StandardQuiz 类
继承自 Quiz 类,表示标准题目。
方法:
matchAnswer:重写父类方法,判断答案是否与标准答案完全匹配。
getResult:重写父类方法,返回题目描述、学生答案和判题结果。
MultipleChoiceQuiz 类
继承自 Quiz 类,表示选择题。
属性:正确答案集合(correctAnswers)
方法:
matchAnswer:重写父类方法,判断答案是否完全包含所有正确答案且不包含错误答案。
getResult:重写父类方法,返回题目描述、学生答案和判题结果。
解释:
MultipleChoiceQuiz 类处理选择题的判题逻辑,支持多选题,答案可以是多个正确答案的集合
FillInTheBlankQuiz 类
继承自 Quiz 类,表示填空题。
方法:
matchAnswer:重写父类方法,判断答案是否包含在标准答案中。
getResult:重写父类方法,返回题目描述、学生答案和判题结果。
TestPaper 类
属性:
试卷编号(paperId)
题目分数映射(quizScores)
总分(totalScore)
方法:
addQuiz:向试卷中添加题目及其分数。
checkTotalScore:检查试卷的总分是否为100分,并在不是100分的情况下打印警告信息。
ExamSet 类
属性:
题目集合(quizzes)
试卷集合(testPapers)
学生集合(students)
被删除的题目集合(deletedQuizzes)
结果列表(results)
方法:
addQuiz:向考试系统中添加一个新的题目。
addTestPaper:向考试系统中添加一张新的试卷。
addStudent:向考试系统中添加一个新的学生。
deleteQuiz:标记一个题目为已删除。
validateAndScoreAnswer:验证给定试卷编号和学生ID的答案,并计算得分。
printResults:打印所有结果。
主程序流程
输入处理
使用 Scanner 类读取控制台输入,收集所有输入,直到遇到 "end" 标记。
处理题目信息
解析输入的题目信息,并将其存储在 ExamSet 的 quizzes 映射中。
处理试卷信息
解析输入的试卷信息,并创建 TestPaper 对象,将其存储在 ExamSet 的 testPapers 映射中。
处理学生信息
解析输入的学生信息,并将其存储在 ExamSet 的 students 映射中。
处理删除题目信息
解析输入的删除题目信息,并更新 ExamSet 的 deletedQuizzes 集合。
处理答卷信息
解析输入的答卷信息,使用 ExamSet 的 validateAndScoreAnswer 方法来验证答案并计算得分。
输出结果
调用 ExamSet 的 printResults 方法,输出每个问题的题目内容、学生的答案和判题结果。
家居强电电路模拟程序-1
家居强电电路模拟程序-1是一个模拟智能家居中强电电路的系统,它能够模拟开关、分档调速器、连续调速器、白炽灯、日光灯和吊扇等设备的行为。该程序通过接收输入信息来模拟电路的连接和设备的状态变化,并输出每个设备的状态。
类和对象设计
CircuitDevice 类
属性:
设备标识符(id)
输入电压(inputVoltage)
输出电压(outputVoltage)
方法:
updateState:更新设备的状态。
getState:获取设备的状态。
setInputVoltage:设置设备的输入电压。
updateOutputVoltage:更新设备的输出电压。
Switch 类
继承自 CircuitDevice,表示开关设备。
属性:
是否闭合(isClosed)
方法:
updateState:切换开关的开闭状态。
updateOutputVoltage:根据开关状态更新输出电压。
SteppedRegulator 类
继承自 CircuitDevice,表示分档调速器设备。
属性:
档位(level)
档位电压级别(LEVELS)
方法:
updateState:根据命令调整档位。
updateOutputVoltage:根据档位更新输出电压。
ContinuousRegulator 类
继承自 CircuitDevice,表示连续调速器设备。
属性:
档位参数(level)
方法:
updateState:根据命令设置档位参数。
updateOutputVoltage:根据档位参数更新输出电压。
IncandescentLamp 类
继承自 CircuitDevice,表示白炽灯设备。
方法:
getState:根据输入电压返回亮度。
FluorescentLamp 类
继承自 CircuitDevice,表示日光灯设备。
方法:
getState:根据输入电压返回亮度。
CeilingFan 类
继承自 CircuitDevice,表示吊扇设备。
方法:
getState:根据输入电压返回转速。
Circuit 类
属性:
设备映射(devices)
连接列表(connections)
方法:
addDevice:添加设备。
addConnection:添加连接。
updateCircuit:更新电路状态。
executeCommand:执行控制命令。
getStates:获取所有设备的状态。
主程序流程
初始化电路:创建 Circuit 对象,并添加设备和连接。
读取输入:使用 Scanner 类读取控制台输入,包括设备连接信息和控制命令。
执行命令:根据输入的控制命令更新设备状态。
更新电路:根据设备状态更新电路的电压。
输出结果:输出所有设备的状态。
家居强电电路模拟程序-2
家居强电电路模拟程序-2在家居强电电路模拟程序-1的基础上进行了扩展,增加了对电阻的考虑、并联电路的支持以及落地扇的模拟。这个程序能够更全面地模拟智能家居中的强电电路行为。
对比家居强电电路模拟程序-1增加的要求
电阻的考虑:本次迭代考虑了白炽灯、日光灯、吊扇和落地扇的电阻,这影响了电路中电流的分布和设备的电压。
并联电路的支持:程序现在能够处理并联电路,包括多个串联电路并联在一起的情况。
落地扇的模拟:新增了落地扇的模拟,其工作电压区间和转速区间与吊扇有所不同。
类和对象设计
CircuitDevice 类
属性:
设备标识符(id)
输入电压(inputVoltage)
输出电压(outputVoltage)
电阻(resistance)
方法:
updateState:更新设备的状态。
getState:获取设备的状态。
setInputVoltage:设置设备的输入电压。
updateOutputVoltage:更新设备的输出电压。
Switch 类
继承自 CircuitDevice,表示开关设备。
属性:
是否闭合(isClosed)
方法:
updateState:切换开关的开闭状态。
updateOutputVoltage:根据开关状态更新输出电压。
SteppedRegulator 类
继承自 CircuitDevice,表示分档调速器设备。
属性:
档位(level)
档位电压级别(LEVELS)
方法:
updateState:根据命令调整档位。
updateOutputVoltage:根据档位更新输出电压。
ContinuousRegulator 类
继承自 CircuitDevice,表示连续调速器设备。
属性:
档位参数(level)
方法:
updateState:根据命令设置档位参数。
updateOutputVoltage:根据档位参数更新输出电压。
IncandescentLamp 类
继承自 CircuitDevice,表示白炽灯设备。
方法:
getState:根据输入电压返回亮度。
FluorescentLamp 类
继承自 CircuitDevice,表示日光灯设备。
方法:
getState:根据输入电压返回亮度。
CeilingFan 类
继承自 CircuitDevice,表示吊扇设备。
方法:
getState:根据输入电压返回转速。
FloorFan 类
继承自 CircuitDevice,表示落地扇设备。
方法:
getState:根据输入电压返回转速。
Circuit 类
属性:
设备映射(devices)
串联电路映射(serialCircuits)
并联电路映射(parallelCircuits)
方法:
addDevice:添加设备。
addSerialCircuit:添加串联电路。
addParallelCircuit:添加并联电路。
updateCircuit:更新电路状态。
executeCommand:执行控制命令。
getStates:获取所有设备的状态。
主程序流程
初始化电路:创建 Circuit 对象,并添加设备和电路。
读取输入:使用 Scanner 类读取控制台输入,包括设备连接信息、控制命令和电路信息。
执行命令:根据输入的控制命令更新设备状态。
更新电路:根据设备状态和电路结构更新电路的电压。
输出结果:输出所有设备的状态。
3.踩坑心得
1.在家居强电电路模拟程序-1中出现多个开关不能正确处理,最后增加了代码在最后判断整个回路是否联通。
在执行命令后立即调用 updateCircuit 方法更新电路状态,确保每次命令执行后电路状态都是最新的。这涉及到了命令执行与状态更新的时序问题,确保电路状态的一致性和准确性。这些更改和添加的功能反映了对电路模拟程序的进一步细化和优化,使其更接近实际电路的行为,同时也提高了代码的效率和可读性。
2.在实验答题判题程序-4中最开始没能正确的分割多选题的答案导致答案丢失,后修改分割的逻辑成功
未修改前输出
alert: full score of test paper1 is not 100 points
1+1=5false
党十八大报告提出要加强()建设。A 政务诚信 B 商务诚信 C社会诚信 D司法公信Apartially correct
20201103 Tom: 0 4~4
修改后
alert: full score of test paper1 is not 100 points
1+1=5false
党十八大报告提出要加强()建设。A 政务诚信 B 商务诚信 C社会诚信 D司法公信~A C~partially correct
20201103 Tom: 0 4~4
在处理字符串解析时,必须仔细考虑分割和提取逻辑,确保所有可能的输入都能被正确处理。
3.在家居强电电路模拟程序-2中如何处理电路闭合状态的检查和更新电压的逻辑。最开始无论电路是否闭合,只要主电路存在,就会更新电压,修改后如果主电路不存在或电路不闭合,则会将所有设备的输入电压设为0
4.在开发家居强电电路模拟程序-2的过程中,我最初对电路模拟的深层机制理解不足,这导致模拟结果与实际电路行为存在偏差。通过深入研究相关资料,我掌握了电路模拟的核心原则,并据此优化了我的代码架构。我原先的设计未能充分考虑电阻对电路行为的影响,这使得模拟结果缺乏准确性。在对电路模拟的基础知识有了更深刻的理解后,在电压计算中纳入了电阻因素。这一改进不仅提升了模拟结果的精确度,也增强了系统的适应性和灵活性。通过这次经验,我认识到了深入理解模拟对象物理特性的重要性,以及在软件开发中不断学习和应用新知识的价值。
4.改进建议
输入验证与正则表达式应用
增强输入验证:对于所有输入数据,使用正则表达式进行格式验证,确保数据的格式符合预期。例如,对于学生答案,可以验证是否为数字或特定格式的字符串。
实时反馈:在输入不符合格式时,立即给出错误提示,并允许用户重新输入,而不是在处理结束后才报告错误。
异常处理机制
全局异常处理:为整个程序或关键部分添加全局异常处理逻辑,确保任何未被捕获的异常都能被妥善处理。
细化异常类型:针对不同类型的输入错误抛出具体的异常,并在捕获时给出具体的错误信息,便于问题定位和修复。
逻辑分离与模块化
功能模块化:将输入解析、业务逻辑处理、结果输出等分离成独立的模块或类,降低耦合度,提高代码的可读性和可维护性。
单一职责原则:确保每个类或方法只处理一种类型的任务,简化调试和测试过程。
性能优化
选择合适的数据结构:根据实际使用场景选择最合适的数据结构,例如在需要频繁查找的场景使用HashMap,在需要有序数据时使用TreeMap。
电路模拟精度提升
数值计算方法:使用更精确的数值计算方法来处理电路中的电压和电流计算,避免因浮点数精度问题导致的模拟误差。
异常处理与电路安全
电路安全检查:在模拟电路连接时,增加短路和过载保护逻辑,确保电路模拟的安全性。
5.总结
本阶段的三次题目集涉及了答题判题程序和家居强电电路模拟程序,涵盖了从基本的面向对象编程到复杂的电路模拟和数据处理。以下是从这些题目中学到的知识和需要进一步学习及研究的领域,学习了如何设计类和对象来模拟现实世界中的问题,如答题判题程序中的题目、试卷、学生信息,以及家居电路模拟中的开关、调速器、灯具等。学习了如何使用正则表达式进行输入验证,确保数据的正确性和程序的健壮性。了解了在Java中处理异常的重要性,以及如何使用 try-catch 块来捕获和处理异常。加深了对封装、继承和多态等概念的理解,尤其是在答题判题程序和家居电路模拟程序中的应用。深入学习更复杂的数据结构和算法,以解决更大规模的问题,对于家居电路模拟程序,需要进一步学习电路理论、电子元件特性等专业知识,以更准确地模拟电路行为。通过本阶段的学习,我们不仅提升了自己的编程技能,也对软件开发有了更深入的理解。未来的学习将更加注重实践和深入研究,以应对更加复杂和挑战性的项目。