Java三角形判定程序scalene三角形分支不触发问题排查
三角形判定程序Bug修复
不等边三角形分支永远不触发,是代码里的判断逻辑存在多处笔误和结构错误导致的,具体问题和修复方案如下:
核心错误点
- 最外层三角形合法性判断逻辑完全错误:使用了或
||连接判断条件,且第二个判定项笔误写成(sideB + sideA) > sideA,化简后等价于sideB > 0,只要输入的第二条边是正整数,整个最外层if条件就永远成立,对应的else分支(写的不等边三角形输出)永远没有执行机会。
合法三角形的判定规则是任意两边之和大于第三边,三个条件必须同时满足,需要用且&&连接,正确的三个判定项应为sideA+sideB>sideC、sideB+sideC>sideA、sideA+sideC>sideB。 - 无效三角形的判断分支位置错误:把“不是有效三角形”的判断写在了最外层“合法三角形”的代码块内部,逻辑矛盾,且判定项同样存在笔误。
- 三角形类型判断没有做互斥:等边三角形本身满足任意两边相等的条件,现有写法输入等边边长时,会同时输出等边三角形、等腰三角形两条结果,逻辑错误。
- 不等边三角形判定逻辑错位:不等边三角形的前提是首先为合法三角形,其次三条边两两不相等,不是“不满足最外层错误if条件”的场景。
修正后代码
import java.util.Scanner; public class TriangleJudgement { public static void main(String[] args) { System.out.println("Hello, my name is Christian"); System.out.println("In this program you will enter three whole numbers and\nI will tell you if the numbers you entered equal a triangle."); Scanner scan = new Scanner(System.in); System.out.println("Please enter your first whole number:"); int sideA = Integer.parseInt(scan.nextLine()); System.out.println("Please enter your second whole number:"); int sideB = Integer.parseInt(scan.nextLine()); System.out.println("Please enter your third whole number:"); int sideC = Integer.parseInt(scan.nextLine()); scan.close(); // 优先校验三角形合法性 boolean isValid = (sideA + sideB > sideC) && (sideB + sideC > sideA) && (sideA + sideC > sideB); if (!isValid) { System.out.println("That is not a valid triangle."); return; } // 按判断严格度从高到低判定三角形类型,分支互斥避免重复输出 if (sideA == sideB && sideB == sideC) { System.out.println("That is an equilateral triangle."); } else if (sideA == sideB || sideB == sideC || sideA == sideC) { System.out.println("That is an isosceles triangle."); } else { System.out.println("That is a scalene triangle."); } } }
修正逻辑说明
- 先单独做合法性校验,不满足三角形规则直接输出结果终止程序,避免后续类型判断出错
- 类型判断使用
if-else if-else互斥结构,先判定条件最严格的等边三角形,再判定等腰三角形,剩余所有合法三角形自然为不等边三角形,不会出现重复输出、分支遗漏的问题 - 修正了所有笔误的边长计算项和逻辑连接符,判定规则完全符合三角形数学定义
内容的提问来源于stack exchange,提问作者Christian Plumb
相关产品推荐
相关产品推荐

