Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
JavaScript 四边形属性检测与分类教程_创想鸟

JavaScript 四边形属性检测与分类教程

JavaScript 四边形属性检测与分类教程

本教程详细介绍了如何使用 JavaScript 编写程序,根据用户输入的四边形边长和角度数据,准确判断其属于正方形、矩形、菱形还是平行四边形。文章将深入探讨四边形的几何特性、JavaScript 条件语句的正确运用,并提供一个结构清晰、逻辑严谨的代码示例,帮助开发者构建健壮的几何图形分类应用。

一、理解四边形几何特性

在编写代码之前,首先需要清晰地理解各种四边形的几何定义。这是构建正确判断逻辑的基础。

正方形 (Square):所有四条边长度相等。所有四个内角都是 90 度。矩形 (Rectangle):对边长度相等(即相邻边不一定相等)。所有四个内角都是 90 度。菱形 (Rhombus):所有四条边长度相等。对角相等,但内角不一定是 90 度(如果所有角都是 90 度,则为正方形)。平行四边形 (Parallelogram):对边长度相等且平行。对角相等,但内角不一定是 90 度。(如果所有角都是 90 度,则为矩形;如果所有边都相等,则为菱形;如果两者都满足,则为正方形)。

一个重要的几何特性是:任何四边形的内角和都为 360 度。在程序中加入这一检查可以有效过滤无效输入。

二、JavaScript 输入处理与类型转换

从用户那里获取输入时,prompt() 函数返回的是字符串类型。在进行数值比较和计算之前,必须将其转换为数字类型。

// 获取用户输入let sideLength_one = prompt("请输入第一条边的长度: ");let sideLength_two = prompt("请输入第二条边的长度: ");let sideLength_three = prompt("请输入第三条边的长度: ");let sideLength_four = prompt("请输入第四条边的长度: ");let angle_one = prompt("请输入第一个角的度数: ");let angle_two = prompt("请输入第二个角的度数: ");let angle_three = prompt("请输入第三个角的度数: ");let angle_four = prompt("请输入第四个角的度数: ");// 将字符串输入转换为数字sideLength_one = Number(sideLength_one);sideLength_two = Number(sideLength_two);sideLength_three = Number(sideLength_three);sideLength_four = Number(sideLength_four);angle_one = Number(angle_one);angle_two = Number(angle_two);angle_three = Number(angle_three);angle_four = Number(angle_four);// 建议:检查输入是否为有效数字if (isNaN(sideLength_one) || isNaN(sideLength_two) || isNaN(sideLength_three) || isNaN(sideLength_four) ||    isNaN(angle_one) || isNaN(angle_two) || isNaN(angle_three) || isNaN(angle_four)) {    console.error("输入无效,请确保所有输入都是数字。");    // 可以选择退出程序或重新提示    // return; }

三、构建条件判断逻辑

使用 if…else if…else 语句链是处理这种多条件分类问题的标准方法。重要的是,判断的顺序应从最具体、最严格的条件开始,逐步放宽到更通用的条件。例如,正方形是最特殊的四边形,它既是矩形也是菱形,所以应首先判断正方形。

常见逻辑误区及纠正:

立即学习“Java免费学习笔记(深入)”;

多条件“与”操作 (&&): 错误地将 if (a && b && c == d) 理解为 a == d && b == d && c == d。正确的写法是每个比较都明确写出,例如 a == d && b == d && c == d。“或”操作 (||) 的滥用: 在需要同时满足多个条件时,不应使用 ||。例如,判断矩形需要“对边相等”和“所有角为90度”,而不是“对边相等”或“所有角为90度”。switch (true) 的适用性: 对于涉及复杂逻辑表达式(如多个变量的比较、数值范围判断)的条件,if/else if 结构通常比 switch (true) 更清晰、更推荐。switch 语句更适用于基于单个变量的离散值判断。

四边形分类逻辑实现:

// 定义一个函数来封装判断逻辑function classifyQuadrilateral(s1, s2, s3, s4, a1, a2, a3, a4) {    // 1. 基本有效性检查:内角和是否为 360 度 (允许微小浮点误差)    const angleSum = a1 + a2 + a3 + a4;    const epsilon = 0.001; // 浮点数比较的容差    if (Math.abs(angleSum - 360) > epsilon) {        return "这不是一个标准的四边形 (内角和不为 360 度)。";    }    // 2. 判断正方形    // 所有边相等 且 所有角为 90 度    if (s1 === s2 && s2 === s3 && s3 === s4 &&        a1 === 90 && a2 === 90 && a3 === 90 && a4 === 90) {        return "您的形状是正方形!";    }    // 3. 判断菱形 (如果不是正方形,但所有边相等)    // 所有边相等 且 至少有一个角不为 90 度 (以区分正方形)    if (s1 === s2 && s2 === s3 && s3 === s4) {        // 如果已经排除了正方形,那么所有边相等但角不都是90度的就是菱形        return "您的形状是菱形!";    }    // 4. 判断矩形 (如果不是正方形,但对边相等且所有角为 90 度)    // 对边相等 (s1=s3, s2=s4) 且 所有角为 90 度    if (s1 === s3 && s2 === s4 &&        a1 === 90 && a2 === 90 && a3 === 90 && a4 === 90) {        // 这里的逻辑隐含了 s1 != s2 (否则就是正方形,已经在前面排除了)        return "您的形状是矩形!";    }    // 5. 判断平行四边形 (如果不是正方形、菱形、矩形,但对边相等)    // 对边相等 (s1=s3, s2=s4)    if (s1 === s3 && s2 === s4) {        // 这里的逻辑隐含了角不都是90度,且相邻边不都相等        return "您的形状是平行四边形!";    }    // 6. 其他情况:不规则四边形    return "您的形状是不规则四边形。";}// 调用函数并输出结果const result = classifyQuadrilateral(    sideLength_one, sideLength_two, sideLength_three, sideLength_four,    angle_one, angle_two, angle_three, angle_four);console.log(result);

四、完整代码示例

将上述逻辑整合到一起,形成一个完整的 JavaScript 程序。

// Create a program that receives the length of each side and the angles of each corner (these can be hard-coded) and // determines whether the shape is a square, a rectangle, a rhombus or a parallelogram.console.log('欢迎!让我们来判断您正在处理的四边形是什么类型。');// 获取用户输入并转换为数字let sideLength_one = Number(prompt("请输入第一条边的长度: "));let sideLength_two = Number(prompt("请输入第二条边的长度: "));let sideLength_three = Number(prompt("请输入第三条边的长度: "));let sideLength_four = Number(prompt("请输入第四条边的长度: "));console.log("太棒了!现在我们来输入角度。");let angle_one = Number(prompt("请输入第一个角的度数: "));let angle_two = Number(prompt("请输入第二个角的度数: "));let angle_three = Number("请输入第三个角的度数: "); // 注意:原始代码这里缺少 promptlet angle_four = Number(prompt("请输入第四个角的度数: "));// 建议:基本的输入校验if (isNaN(sideLength_one) || isNaN(sideLength_two) || isNaN(sideLength_three) || isNaN(sideLength_four) ||    isNaN(angle_one) || isNaN(angle_two) || isNaN(angle_three) || isNaN(angle_four) ||    sideLength_one <= 0 || sideLength_two <= 0 || sideLength_three <= 0 || sideLength_four <= 0 ||    angle_one <= 0 || angle_two <= 0 || angle_three <= 0 || angle_four  epsilon) {            return "这不是一个标准的四边形 (内角和不为 360 度)。";        }        // 2. 判断正方形:所有边相等 且 所有角为 90 度        if (s1 === s2 && s2 === s3 && s3 === s4 &&            a1 === 90 && a2 === 90 && a3 === 90 && a4 === 90) {            return "您的形状是正方形!";        }        // 3. 判断菱形:所有边相等 (但不是正方形)        // 已经排除了正方形,所以这里所有边相等但角不都是90度的就是菱形        if (s1 === s2 && s2 === s3 && s3 === s4) {            return "您的形状是菱形!";        }        // 4. 判断矩形:对边相等 且 所有角为 90 度 (但不是正方形)        // 已经排除了正方形,所以这里对边相等且角都是90度的就是矩形        if (s1 === s3 && s2 === s4 &&            a1 === 90 && a2 === 90 && a3 === 90 && a4 === 90) {            return "您的形状是矩形!";        }        // 5. 判断平行四边形:对边相等 (但不是正方形、菱形、矩形)        // 已经排除了更具体的类型,这里对边相等的就是平行四边形        if (s1 === s3 && s2 === s4) {            return "您的形状是平行四边形!";        }        // 6. 其他情况:不规则四边形        return "您的形状是不规则四边形。";    }    // 调用函数并输出结果    const shapeResult = classifyQuadrilateral(        sideLength_one, sideLength_two, sideLength_three, sideLength_four,        angle_one, angle_two, angle_three, angle_four    );    console.log(shapeResult);}

五、注意事项与总结

浮点数精度: 在比较浮点数(如角度或计算后的边长)时,直接使用 === 可能会因为浮点数精度问题导致不准确的结果。更好的做法是使用一个很小的容差值(epsilon)进行比较,例如 Math.abs(value1 – value2) 输入验证: 务必对用户输入进行验证,确保它们是有效的数字且符合几何图形的实际意义(例如,边长不能为负或零,角度不能为负)。逻辑顺序: if…else if 链的判断顺序至关重要。从最特殊的形状(如正方形)开始,逐步到更一般的形状(如平行四边形),可以避免逻辑上的错误分类。代码可读性: 使用有意义的变量名、适当的注释和代码格式化,可以大大提高代码的可读性和可维护性。扩展性: 如果未来需要添加更多四边形类型(如梯形、筝形),可以按照相同的逻辑,在现有 if…else if 链中添加新的判断条件。

通过本教程,您应该能够理解并实现一个健壮的 JavaScript 程序,用于根据几何属性准确分类四边形。掌握条件逻辑的正确运用和几何知识的结合,是进行此类编程任务的关键。

以上就是JavaScript 四边形属性检测与分类教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1572630.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP动态生成HTML表格时样式失效的常见陷阱与解决方案
上一篇 2025年12月22日 14:46:10
下一篇 2025年12月22日 14:46:16

相关推荐

  • 《如龙 极》《极2》 PS5、XSX|S版12月8日发售 支持中文

    《如龙 极》《极2》 PS5、XSX|S版12月8日发售 支持中文《如龙 极》《极2》 PS5、XSX|S版12月8日发售 支持中文《如龙 极》《极2》 PS5、XSX|S版12月8日发售 支持中文《如龙 极》《极2》 PS5、XSX|S版12月8日发售 支持中文

    来源:官方 Nintendo Switch™ 2平台游戏《人中之龙 极2》(预计2025年11月13日发售)数字版已于今日9月24日正式开启预购。 同时,《人中之龙 极》与《人中之龙 极2》的PlayStation®5及Xbox Series X|S版本将于2025年12月8日推出。此次新版本将新增…

    2026年9月21日 • 用户投稿
    000
  • PHP面向对象编程:解决父类构造器传递值在子对象方法中为空的问题

    本文探讨了PHP中一个常见的面向对象编程问题:当父类构造器接收并初始化一个子对象时,如何确保该子对象内部的方法能正确访问到父类传递的值,避免出现null。文章将通过示例代码,详细介绍两种核心解决方案:通过控制器提供内部对象的访问器(Getter),以及采用依赖注入(Dependency Inject…

    2026年9月21日
    400
  • Java中字符到数字转换:解决for循环提前返回的常见陷阱

    本文探讨java中`for`循环在字符到数字转换时,因`return`语句放置不当导致程序提前终止、无法完整处理字符串的问题。我们将分析这种常见陷阱,并提供修正方案,演示如何正确利用循环填充数组,并在循环结束后统一返回最终结果,确保每个字符都能被准确映射和组合。 引言:字符到数字的映射需求 在编程实…

    2026年9月21日
    100
  • Java集合框架在数据处理中的应用实例

    使用Set去重:通过LinkedHashSet去除标签重复并保持顺序;2. Map统计频次:利用HashMap统计单词出现次数;3. List结合Comparator排序:按年龄升序、姓名降序排列用户;4. 集合嵌套处理数据:用Map组织部门与员工列表。集合框架提升数据处理效率与代码可读性。 Jav…

    2026年9月21日
    100
  • 如何为VSCode设置自定义的代码高亮颜色?

    答案:通过settings.json中的editor.tokenColorCustomizations可自定义VSCode代码高亮颜色,支持全局或特定主题下修改关键字、字符串等元素颜色,结合textMateRules和作用域精确控制,提升代码可读性。 为 VSCode 设置自定义的代码高亮颜色,可以…

    2026年9月21日
    000
  • linux内核定时器实验

    linux内核定时器实验linux内核定时器实验linux内核定时器实验linux内核定时器实验

    大家好,又见面了,我是你们的朋友全栈君。 文章目录一、linux时间管理和内核定时器简介1.内核时间管理简介2.内核定时器简介1.init_timer 函数2.add_timer 函数3.del_timer 函数4.del_timer_sync 函数5.mod_timer 函数3.linux内核短延…

    2026年9月21日 • 用户投稿
    000
  • php switch语句怎么用_php中switch条件判断语句的用法示例

    答案:PHP中switch语句用于多条件判断,语法为switch(表达式){case值:代码;break;},通过松散比较匹配case值,执行对应代码块,遇到break跳出避免穿透,default处理无匹配情况。示例根据$day输出星期几,注意事项包括case值不可为表达式、需注意类型松散比较、省略…

    2026年9月21日
    200
  • 《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”

    《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”《哈迪斯2》95分年度必玩!外媒锐评”独立游戏崛起”

    外媒comicbook报道,2025年是游戏界的辉煌之年,多款新作在metacritic上评分突破90分,并获得“必玩”徽章。 《哈迪斯2》以95分的成绩成为本年度评分最高的游戏,强势领跑年度最佳游戏(GOTY)的激烈竞争,独立游戏的全面崛起也成为今年最瞩目的行业亮点。 《哈迪斯2》:95分封神,战…

    2026年9月21日 • 用户投稿
    200
  • 《最终幻想7重生》制作人力挺NS2钥匙卡!开发者受益匪浅

    《最终幻想7重生》的联合制作人滨口直树(Naoki Hamaguchi)在最近接受Wccftech采访时,对任天堂Switch 2引入的游戏钥匙卡(Game Key Card)表达了积极态度。 他不仅回应了围绕该设计的争议,还大胆预测任天堂未来将大力推动这一新格式的发展,并指出其为游戏开发团队带来的…

    2026年9月21日
    000
  • Android Ksoap2序列化嵌套整数数组到.NET Web服务的解决方案

    本教程旨在解决Android Ksoap2在向.NET Web服务发送包含嵌套整数数组(如`ArrayList`)的自定义对象时遇到的序列化错误。核心解决方案包括将`ArrayList`替换为`Vector`,并为`Vector.class`添加显式Ksoap2类型映射,确保数据正确传输。 在And…

    2026年9月21日
    100
  • 在Java中静态方法能否被重写

    静态方法属于类而非实例,不参与运行时动态绑定,因此不能被重写;2. 子类定义同名静态方法时发生方法隐藏,调用时机由引用类型在编译阶段决定;3. 如示例所示,Parent p = new Child() 调用 p.display() 输出 “Parent static method&#82…

    2026年9月21日
    100
  • 在Java中变量和常量有什么区别

    变量的值可修改,常量(用final修饰)一旦赋值不可变;变量用于动态数据,常量用于固定值,如PI或配置参数。 在Java中,变量和常量的主要区别在于它们的值能否被修改。变量的值可以在程序运行过程中改变,而常量一旦赋值就不能再更改。 变量(Variable) 变量是用于存储数据的基本单元,其值在程序执…

    2026年9月21日
    200
  • 在Java中如何使用方法重载

    方法重载允许类中多个同名方法共存,只要参数列表不同即可。例如Calculator类中add方法可接受不同数量、类型或顺序的参数,Java根据传入参数自动匹配对应方法,提升调用灵活性与代码可读性。 方法重载(Overloading)是Java中实现多态的一种方式,它允许在一个类中定义多个同名方法,只要…

    2026年9月21日
    300
  • VSCode的括号着色功能如何帮助你避免语法错误?

    VSCode括号着色功能通过彩色高亮匹配括号,帮助用户直观识别嵌套结构、提升代码可读性,并快速发现遗漏或多余括号,减少语法错误。 VSCode的括号着色功能通过视觉方式帮你快速识别代码中的匹配和嵌套结构,减少语法错误的发生。当你在编写代码时,成对出现的括号(如()、[]、{})会被高亮显示为相同或相…

    2026年9月21日
    000
  • 如何模拟用户登录状态进行测试?

    模拟用户登录状态是为了测试系统功能和安全性。1.在开发初期帮助发现和修复问题。2.测试不同用户权限下的功能访问。方法包括:1.直接操作session或cookie。2.使用测试框架如junit或testng。3.模拟api请求。 模拟用户登录状态进行测试是确保软件系统用户体验和安全性的关键步骤。无论…

    2026年9月21日
    300
  • 内存占用过高的优化方法

    优化内存占用的方法包括:1. 遵循基本内存管理原则,避免不必要的对象创建,使用合适的数据结构,及时释放资源;2. 优化数据结构,如从arraylist切换到hashmap;3. 检测并修复内存泄漏,通过定期清理不再需要的数据;4. 使用对象池减少对象的创建和销毁;5. 遵循性能优化与最佳实践,避免频…

    2026年9月20日
    000
  • 在Java中高效提取整数的最小与最大数字

    本文详细介绍了在java中如何从一个整数中提取其包含的最小和最大数字。通过采用数学运算(取模和除法)或字符串转换两种方法,实现对整数各位数字的遍历与比较,从而高效地找出并显示这些极值数字。文章提供了具体的代码示例,并探讨了不同方法的适用场景与注意事项。 在Java编程中,我们有时需要从一个给定的整数…

    2026年9月20日
    000
  • 在Java中如何正确使用自动拆箱与装箱

    装箱是基本类型转包装类,拆箱反之,通过valueOf和xxxValue实现;需避免null拆箱引发空指针,注意Integer缓存导致的==比较陷阱,应使用equals比较,循环中频繁装箱拆箱会增加GC开销。 Java中的自动拆箱与装箱是基本类型和其对应包装类之间自动转换的机制。正确使用这一特性可以提…

    2026年9月20日
    100
  • 如何在Laravel中配置多语言支持

    在laravel中配置多语言支持的核心步骤包括定义语言包、设置应用语言环境以及使用翻译函数。1. 创建语言文件:在resources/lang目录下为每种语言创建子目录(如en和zh-cn),并在其中定义php数组存储翻译字符串;2. 设置语言环境:通过config/app.php中的’…

    2026年9月20日
    000
  • 距发售仅剩一周!《无尽传说RE》Xbox实体版疑取消

    根据北美游戏零售商VGP发布的消息,《无尽传说 复刻版》Xbox平台的欧版实体版已在原定发售日前一周被正式取消。该零售商在Bluesky平台上发表声明表示:“我们遗憾地确认,已接到通知,《无尽传说 复刻版》Xbox Series X欧洲实体版本将不再推出。所有相关预订订单将会被取消,并启动退款流程。…

    2026年9月20日
    100

发表回复

登录后才能评论
关注微信