首页 > 编程语言 >java-BLOG-3

java-BLOG-3

时间:2024-12-28 22:43:05浏览次数:1  
标签:输出 java BLOG 体积 计算 谷仓 方法 输入

一.前言:
期末测验:
本次测验主要是关于谷仓的体积的计算,一个是长方体,一个是圆柱体,比较两个体积的大小。第一个题目是算这两个体积的大小,第二个题目加上了圆锥体,第三个题目是从小到大排序这三个体积,并按需输出这三个体积。本次测验计算过程是不难的,主要是要注意给出的材料长度是不同形状的周长,要先通过长度计算出半径,再通过半径算出面积,再乘以高度,得出体积。因为是测验时间有限,所以难度不大。
第七、八次题目集:
这两次题目集是在上次题目集的基础是迭代的,说实话,难度有点大,题目设计包括定义类和对象,如Switch、DimmerSwitch、ContinuousDimmer、Light、Fan、MutualSwitch、Curtain等。类的封装,包括私有属性和公共方法。继承与多态,需要定义一个基类Device,然后让其他设备类继承自它。题目要求实现多种设备的控制逻辑,每种设备都有特定的行为和状态。需要解析和处理复杂的连接信息,确保电路的正确模拟。输出格式有严格的要求,需要精确控制输出内容。难度偏高:题目涉及多个设备的模拟,需要理解设备的行为和状态转换,复杂度较高,需要处理复杂的电路连接信息,确保电路的正确模拟,输出格式有严格的要求,需要精确控制输出内容以及逻辑思维要求高:需要理解电路的工作原理,设计合理的算法来模拟电路的行为。

二.设计与分析
期末测验-1
(1)类图

(2)圈复杂度

1.代码结构
Volume类:计算立方体和圆柱体的体积。
calculateCubeVolume方法:计算立方体体积。
calculateCylinderVolume方法:计算圆柱体体积。
提供获取立方体和圆柱体体积的方法。
Input类:存储输入的长度和高度。
Output类:输出体积信息并根据体积大小建议使用哪种类型的粮仓。
Main类:程序入口,负责读取用户输入、验证输入格式、创建对象并调用输出方法。

2.主要功能:
输入处理:从控制台读取一行输入,解析出长度和高度。
输入验证:检查输入是否为两个有效的正数。
体积计算:根据输入的长度和高度计算立方体和圆柱体的体积。
结果输出:输出两种粮仓的体积,并根据体积大小建议使用哪种类型的粮仓。

3.代码逻辑:
使用Scanner类读取用户输入。
检查输入格式是否正确(是否为两个数字)。
将输入的字符串转换为double类型,并检查是否为正数。
创建Input对象存储长度和高度。
使用Input对象的值创建Volume对象,计算体积。
创建Output对象,输出体积信息并给出建议。

4.解释与心得
这代码部分主要是将输入的长度计算出相应的半径,然后再算出体积。

期末测验-2
(1)类图

(2)圈复杂度

1.代码结构
抽象类 Granary:定义了一个粮仓的基本属性 height 和一个抽象方法 calculateVolume(),用于计算粮仓的体积。
具体类 CubeGranary、CylinderGranary 和 ConeGranary:分别继承自 Granary,并实现了 calculateVolume() 方法来计算正方体、圆柱体和圆锥体粮仓的体积。
类 TotalVolume:包含两个静态方法:
createGranaries(double height, List perimeters):根据给定的高度和周长列表创建不同类型的粮仓对象,并返回一个粮仓对象列表。
calculate(List granaries):计算并返回所有粮仓的总体积。
主类 Main:程序的入口,负责从用户输入读取高度和周长列表,调用 TotalVolume 类的方法计算总体积,并输出结果。

2.主要逻辑流程
从用户输入读取粮仓的高度。
继续读取用户输入的周长列表,直到遇到无效输入或非正数。
根据周长的大小创建不同类型的粮仓对象。
计算所有粮仓的总体积。
输出总体积,保留两位小数。

3.解释与心得
方法接收两个参数:height(粮仓的高度)和 perimeters(一个包含多个周长的列表)。创建一个 Granary 对象的列表 granaries。遍历 perimeters 列表中的每个周长值 perimeter:如果 perimeter 大于等于 20,则创建一个 CylinderGranary 对象并添加到 granaries 列表。如果 perimeter 在 15 到 20 之间(包括 15,不包括 20),则创建一个 CubeGranary 对象并添加到 granaries 列表。如果 perimeter 在 5 到 15 之间(包括 5,不包括 15),则创建一个 ConeGranary 对象并添加到 granaries 列表。最后,返回包含所有创建的 Granary 对象的列表 granaries。

期末测验-3
(1)类图

(2)圈复杂度

1.代码结构
Granary:一个抽象类,表示谷仓,包含高度属性和计算体积的抽象方法。
CubeGranary:继承自Granary,表示立方体谷仓,通过周长计算边长,并实现体积计算。
CylinderGranary:继承自Granary,表示圆柱形谷仓,通过周长计算半径,并实现体积计算。
ConeGranary:继承自Granary,表示圆锥形谷仓,通过周长计算半径,并实现体积计算。
AddVolume:包含一个静态方法createGranaries,根据不同的周长创建不同类型的谷仓对象。
Sort:包含一个静态方法sort,用于对谷仓列表按照体积从小到大排序。
Output:包含一个静态方法output,用于输出排序后的谷仓体积。
Main:程序入口,负责读取用户输入的高度和周长列表,创建谷仓对象,排序并输出结果。
2.主要功能流程:
从用户输入读取谷仓的高度。
继续读取一系列周长值,直到遇到非数字或非正数。
根据每个周长值创建相应的谷仓对象(立方体、圆柱或圆锥)。
对创建的谷仓对象列表按体积进行排序。
输出排序后的谷仓体积。

3.解释与心得
Sort 类包含一个静态方法 sort,该方法接收一个 List 类型的参数,并使用 Collections.sort 方法按照谷仓容积从小到大对其进行排序。排序的依据是通过 Comparator.comparingDouble 和 Granary::calculateVolume 方法引用实现的,即根据 Granary 对象的 calculateVolume 方法返回的容积值进行比较。
Output 类包含一个静态方法 output,该方法接收一个 List 类型的参数,并输出排序后的谷仓容积。输出格式为每个容积保留两位小数,并且多个容积之间用空格分隔。最后,输出结果后换行。

第七次题目集-家居强电电路模拟程序-3
(1)类图

(2)圈复杂度

第八次题目集-家居强电电路模拟程序-4
(1)类图

(2)圈复杂度

1.代码结构
主类 Main:
当前主类中,Input 类的实例被创建,但没有调用其 processInput 方法来处理输入。因此,程序会直接输出 "short circuit error" 并结束。
建议调用 inputHandler.processInput(input); 来处理用户输入。
Input 类:
该类负责处理用户输入,包括设备连接和设备调整命令。
processConnection 方法中,createDevice 方法的调用是多余的,因为 SeriesCircuit 类的 processConnection 方法中已经调用了 createDevice。
SeriesCircuit 类:
该类管理设备及其连接关系,负责更新电压和状态。
updateVoltages 方法中,电压的传递逻辑是基于设备类型(控制设备或受控设备)来决定的。
设备类:
包括 Switch, GearSpeedRegulator, ContinuousSpeedRegulator, IncandescentLamp, FluorescentLamp, 和 CeilingFan。
每个设备类都实现了 updateState 方法,根据电压来更新设备的状态。

三.踩坑心得
(1)对于测验第一题,计算体积没问题,但是我考虑少了,缺少输入等于0的情况,这都是我请教了同学之后才发现错误在哪。

(2)输入验证:
程序首先读取一行输入并尝试将其分割为两个部分。如果输入格式不正确(即不是恰好两个数值),它会输出 "Wrong Format" 并终止执行。
使用 Double.parseDouble 将字符串转换为双精度浮点数时,可能会抛出 NumberFormatException。因此,使用了 try-catch 块来捕获这种异常,并在发生时输出 "Wrong Format"。
(3)主要是对边界问题尤为关键,一般边界要特殊处理,防止问题出现。
四.改进建议
(1)重复代码:
Input 类中的 createDevice 方法和 SeriesCircuit 类中的 createDevice 方法功能相同,可以考虑将这个方法移到一个公共的地方,比如 SeriesCircuit 类中,然后在 Input 类中调用。
(2)硬编码:
在 createDevice 方法中,设备类型的判断是通过 deviceID.charAt(0) 来实现的,这种硬编码的方式不够灵活。可以考虑使用配置文件或者枚举类型来管理设备类型。
(3)类职责:
Input 类承担了读取输入和处理输入的双重职责,可以考虑将输入读取和处理逻辑分离,提高代码的可维护性和可测试性。
(4)异常处理:
在 processAdjustment 方法中,使用了 try-catch 来捕获所有异常,但这样会隐藏潜在的问题。应该只捕获特定的异常,并且在 catch 块中提供有意义的错误信息。

五.总结
这次期末测验主要是检测我们的解决问题的效率,如何在有限的时间内处理问题,编写代码。测验的总体难度是不大的,我主要是有个问题,没有考虑到特殊情况,导致错了。而对于第七、八次题目集,我感觉难度明显提升,不仅要求我们具备扎实的基础知识,还需要灵活运用所学内容来解决复杂问题。这些题目集让我意识到自己在算法优化和逻辑推理方面还有待提高。时间限制也是一大挑战。如何在有限的时间内高效地分析问题、设计解决方案并完成编码,是我需要不断练习和改进的地方。合理分配时间,优先解决简单明确的问题,再逐步攻克难题,是未来需要加强的策略。通过这次测验,我认识到编程不仅仅是写出正确的代码,更重要的是培养严谨的思维习惯和良好的编程规范。未来的学习中,我会更加注重细节,多做练习,尤其是针对容易忽略的特殊情况,争取在下次测验中取得更好的成绩。
还有就是我希望大作业可以考虑延长时间,因为基本上是迭代编码,如果这次代码没写出来,下一次就难度就更大了,就更写不出了。可以每次大作业保证两周时间写,下一次大作业的发布是上一次发布的一周后,这样保证了每次大作业写都有两周,同时又不会耽误整体的进度。

标签:输出,java,BLOG,体积,计算,谷仓,方法,输入
From: https://www.cnblogs.com/c119/p/18637890

相关文章

  • Java题目集7-8实现总结
    前言本文介绍了家居强电电路模拟程序的第3-4次迭代:第3次迭代在原有的家居强电电路模拟程序基础上,新增了互斥开关(标识符H)和受控窗帘(标识符S)。互斥开关可以在两个分支电路间选择性接通,并设有默认状态和限流电阻;受控窗帘根据室内灯光强度自动调整开合比例,最低工作电压为50V。第4次......
  • 题目集7~8的总结性Blog
    一.前言本次模拟系统设计是对前两次家居电路模拟的深度扩展。在第一版中,我们搭建了基础的电路连接模型,实现了开关、灯具等基本设备的状态控制与电流流动的模拟。在第二版中,我们引入了调速器、互斥开关等更复杂的控制设备,以及对串联、并联电路逻辑的处理。随着系统复杂度的提升,我......
  • 高级java每日一道面试题-2024年12月27日-并发篇-锁的优化机制了解吗 ?
    如果有遗漏,评论区告诉我进行补充面试官:锁的优化机制了解吗?我回答:在Java高级面试中,锁的优化机制是一个重要且常见的考点。以下是对Java锁优化机制的详细解释:一、锁的基本概念锁是多线程编程中至关重要的同步机制,用于确保线程间共享数据的正确性。然而,使用锁也会引......
  • Blog3
    (1)前言在完成题目集7-1(家居强电电路模拟程序-3和-4)的过程中,我深入理解了智能家居设备的控制逻辑、电路原理及其编程实现。这些题目集主要考察了对电路元件的理解与应用、面向对象编程的设计模式以及处理复杂输入输出的能力。知识点题目集7-1-3:此题要求设计一个智能家居强电电路......
  • Java内存图(2)
    文章目录一、认知2二、示例与解析示例1打印结果示例二:交换变量打印结果一、认知2 1.作用域的内部原理:{ }(超作用域就不能操作了)在此范围内新声明变量的句柄要被消掉,找对应的括号,执行完之后在他里面声明的变量都要被摧毁2.句柄是一个用来标识和访问......
  • 【java毕设 python毕设 大数据毕设】基于springboot的阳光幼儿管理系统的设计与实现
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • 【java毕设 python毕设 大数据毕设】基于springboot的银行信用卡额度管理系统的设计与
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • java-springboot-vue家政保姆信息管理系统
    目录功能和项目介绍系统实现截图开发核心技术介绍操作手册核心代码部分展示视频演示/源码获取功能和项目介绍本系统的开发本着各个家政企业的发展而努力,当今,席卷全球的互联网的发展带动了家政行业的发展,信息化的管理已经是大势所趋,现今市面上所存在的家政企业管理系......
  • Java笔记——Java命令大全
    文章目录常用Java命令javacjavac命令用于将Java源代码编译成Java字节码文件(.class文件),以便在Java虚拟机(JVM)上运行。基本语法javac[options]source_file(s)javac[options]source_file(s)使用示例javacHelloWorld.javajavacHelloWorld.java参数说明optio......
  • Blog-3 题目集7~8的总结
    22207203-陈思思一、前言(一)第7次题目集(家居强电电路模拟程序-3)知识点:串联电路:电流相同,电压分配。并联电路:电压相同,电流分配。类的设计:电路设备类、受控设备类、控制设备类、串联电路类、并联电路类。数据结构:使用列表或字典存储电路信息、设备状态。算法:递归或迭代计算电......