JS四边形类型判断代码异常:正方形/矩形被误判为Parallelogram
问题:正方形/矩形被错误识别为平行四边形
我写的JavaScript代码无法正常运行,输入正方形或矩形的边长与角度参数时,程序会错误识别为平行四边形。测试过代码也看了YouTube视频,都没解决问题。代码如下:
let side1 = prompt("Please enter the side of the shape"); let side2 = prompt("Please enter the side of the shape"); let side3 = prompt("Please enter the side of the shape"); let side4 = prompt("Please enter the side of the shape"); let corner1 = prompt("Please enter the corners of the shape"); let corner2 = prompt("Please enter the corners of the shape"); let corner3 = prompt("Please enter the corners of the shape"); let corner4 = prompt("Please enter the corners of the shape"); if ( side1 === side2 && side2 === side3 && side3 === side4 && ((corner1 === corner2) === corner3) === corner4 ) { console.log(`The shape is a Square`); } else if ( side1 === side3 && side2 === side4 && ((corner1 < 90 && corner3 > 90 && corner2 < 90 && corner4 > 90) || (corner1 > 90 && corner3 < 90 && corner2 > 90 && corner4 < 90)) ) { console.log(`The shape is a Rhombus`); } else if ( side1 === side3 && side2 === side4 && corner1 === corner3 && corner2 === corner4 ) { console.log(`The shape is a Parallelogram`); } else if ( side1 === side3 && side2 === side4 && corner1 === corner2 && corner3 === corner4 ) { console.log(`The shape is a Rectangle`); } else console.log("Your shape is weird");
修复方案
核心问题分析
- 类型不匹配:
prompt返回的是字符串,直接用===比较数值会出错,比如输入"90"和90不会相等 - 判断顺序错误:平行四边形的条件(对边相等、对角相等)包含了矩形的特征,必须把矩形、正方形的判断放在平行四边形前面,否则会被提前匹配
- 正方形角度判断逻辑错误:
((corner1 === corner2) === corner3) === corner4写法逻辑混乱,应该直接判断四个角都是90度且四边相等 - 菱形条件不完善:原代码的角度判断太局限,菱形本质是四边相等+对角相等且角度非直角
修复后的代码
// 把输入转成数字,避免字符串比较问题 let side1 = Number(prompt("请输入边长1")); let side2 = Number(prompt("请输入边长2")); let side3 = Number(prompt("请输入边长3")); let side4 = Number(prompt("请输入边长4")); let corner1 = Number(prompt("请输入角度1")); let corner2 = Number(prompt("请输入角度2")); let corner3 = Number(prompt("请输入角度3")); let corner4 = Number(prompt("请输入角度4")); // 先判断正方形:四边相等 + 四个角都是90度 if (side1 === side2 && side2 === side3 && side3 === side4 && corner1 === 90 && corner2 === 90 && corner3 === 90 && corner4 === 90) { console.log("这是正方形"); } // 再判断矩形:对边相等 + 四个角都是90度 else if (side1 === side3 && side2 === side4 && corner1 === 90 && corner2 === 90 && corner3 === 90 && corner4 === 90) { console.log("这是矩形"); } // 再判断菱形:四边相等 + 对角相等 + 不是直角 else if (side1 === side2 && side2 === side3 && side3 === side4 && corner1 === corner3 && corner2 === corner4 && corner1 !== 90) { console.log("这是菱形"); } // 最后判断平行四边形:对边相等 + 对角相等 else if (side1 === side3 && side2 === side4 && corner1 === corner3 && corner2 === corner4) { console.log("这是平行四边形"); } else { console.log("这个形状不符合规则"); }
修改说明
- 所有输入用
Number()转成数字类型,确保数值比较准确 - 调整判断顺序:正方形→矩形→菱形→平行四边形,避免宽泛条件提前匹配
- 修正正方形的判断逻辑,直接检查四个角是否为90度
- 简化菱形的角度判断,只要四边相等、对角相等且非直角即可
- 提示文字改成中文,更直观
内容的提问来源于stack exchange,提问作者Newbie
相关产品推荐
相关产品推荐

