You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript四边形检测代码优化求助:精简、可读及错误排查

四边形检测代码优化方案

优化后的代码

// 通用输入函数:获取指定数量的有效数值输入
const getNumericInputs = (count, label) => {
  const inputs = [];
  for (let i = 1; i <= count; i++) {
    let input;
    // 循环直到输入有效正数
    do {
      input = prompt(`请输入${label} ${i}的数值:`);
      // 处理用户取消输入的情况
      if (input === null) return null;
      input = Number(input);
    } while (isNaN(input) || input <= 0);
    inputs.push(input);
  }
  return inputs;
};

alert("这是一个四边形检测程序,请依次输入四条边的长度和四个内角的度数。");

// 获取边和角的输入
const sides = getNumericInputs(4, "边长");
const angles = getNumericInputs(4, "内角");

// 处理用户取消输入的情况
if (!sides || !angles) {
  console.log("检测已取消");
  alert("检测已取消");
} else {
  // 验证四边形内角和是否为360度(允许微小精度误差)
  const angleSum = angles.reduce((sum, angle) => sum + angle, 0);
  if (Math.abs(angleSum - 360) > 0.1) {
    console.log("输入的内角和不为360度,无法构成四边形");
    alert("输入的内角和不为360度,无法构成四边形");
  } else {
    const [s1, s2, s3, s4] = sides;
    const [a1, a2, a3, a4] = angles;
    // 判断是否为平行四边形:对边相等且对角相等
    const isParallelogram = s1 === s3 && s2 === s4 && a1 === a3 && a2 === a4;

    if (isParallelogram) {
      const allSidesEqual = s1 === s2 && s2 === s3;
      const allAnglesRight = a1 === 90 && a2 === 90;

      if (allSidesEqual && allAnglesRight) {
        console.log("这是正方形");
      } else if (allAnglesRight) {
        console.log("这是矩形");
      } else if (allSidesEqual) {
        console.log("这是菱形");
      } else {
        console.log("这是平行四边形");
      }
    } else {
      console.log("该图形不是正方形、矩形、菱形或平行四边形");
    }
  }
}

关键改进说明

1. 封装重复输入逻辑

原代码中获取边和角的输入逻辑完全重复,通过封装getNumericInputs函数,减少冗余代码,同时统一处理输入验证逻辑。

2. 增加输入有效性验证

  • 确保输入是有效的正数(排除NaN、负数、零)
  • 处理用户点击取消输入的情况
  • 验证四边形内角和是否为360度(考虑浮点精度,允许0.1的误差),原代码完全忽略这个基本几何规则,可能导致错误判断。

3. 重构条件判断逻辑

原代码条件判断冗余且层级混乱:

  • 先判断是否为平行四边形(这是其他三种图形的基础),再在平行四边形的前提下判断正方形、矩形、菱形,逻辑更清晰
  • 用语义化变量(如allSidesEqual、allAnglesRight)替代冗长的条件表达式,简化判断
  • 修复原代码逻辑错误:原代码判断菱形/平行四边形时仅限定特定角的大小(如a1<90),实际上只要对角相等即可,角度大小的组合不影响类型判断,原代码会误判部分合法情况。

4. 提升代码可读性

  • 使用数组存储边和角,通过解构赋值简化变量调用
  • 代码结构分层,每个逻辑块负责单一功能
  • 移除无意义变量:原代码中start = alert(...)无实际作用,直接删除

内容的提问来源于stack exchange,提问作者saf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:45:51