4月28日
TriangleTypeChecker.java
package test3; public class TriangleTypeChecker { /** * 判断三角形类型 * @param a 第一条边长度 * @param b 第二条边长度 * @param c 第三条边长度 * @return 三角形类型字符串 * @throws IllegalArgumentException 如果边长不合法(<=0或不能构成三角形) */ public String checkTriangleType(double a, double b, double c) { // 检查边长是否合法 if (a <= 0 || b <= 0 || c <= 0) { throw new IllegalArgumentException("边长必须大于0"); } // 检查是否能构成三角形 if (a + b <= c || a + c <= b || b + c <= a) { return "非三角形"; } // 判断三角形类型 boolean isEquilateral = a == b && b == c; // 等边 boolean isIsosceles = a == b || b == c || a == c; // 等腰 // 计算各边平方用于判断角度类型 double a2 = a * a; double b2 = b * b; double c2 = c * c; boolean isRight = Math.abs(a2 + b2 - c2) < 1e-6 || // 直角 Math.abs(a2 + c2 - b2) < 1e-6 || Math.abs(b2 + c2 - a2) < 1e-6; boolean isObtuse = a2 + b2 < c2 || // 钝角 a2 + c2 < b2 || b2 + c2 < a2; // 判断并返回结果 if (isEquilateral) { return "等边三角形"; } else if (isIsosceles) { if (isRight) { return "等腰直角三角形"; } else if (isObtuse) { return "等腰钝角三角形"; } else { return "等腰锐角三角形"; } } else { if (isRight) { return "直角三角形"; } else if (isObtuse) { return "钝角三角形"; } else { return "锐角三角形"; } } } }
TriangleTypeCheckerTest.java
package test3; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class TriangleTypeCheckerTest { private TriangleTypeChecker triangleChecker; @BeforeEach void setUp() { triangleChecker = new TriangleTypeChecker(); } // 测试非三角形情况 @Test void testNotTriangle() { assertEquals("非三角形", triangleChecker.checkTriangleType(1, 2, 3)); assertEquals("非三角形", triangleChecker.checkTriangleType(5, 1, 2)); assertEquals("非三角形", triangleChecker.checkTriangleType(1, 1, 2)); } // 测试等边三角形 @Test void testEquilateral() { assertEquals("等边三角形", triangleChecker.checkTriangleType(2, 2, 2)); assertEquals("等边三角形", triangleChecker.checkTriangleType(5.5, 5.5, 5.5)); } // 测试等腰三角形 @Test void testIsosceles() { // 2,2,3 实际上是等腰钝角三角形 assertEquals("等腰钝角三角形", triangleChecker.checkTriangleType(2, 2, 3)); // 改为测试一个真正的等腰锐角三角形 assertEquals("等腰锐角三角形", triangleChecker.checkTriangleType(4, 4, 5)); assertEquals("等腰锐角三角形", triangleChecker.checkTriangleType(5, 5, 6)); } // 测试等腰直角三角形 @Test void testIsoscelesRight() { assertEquals("等腰直角三角形", triangleChecker.checkTriangleType(1, 1, Math.sqrt(2))); assertEquals("等腰直角三角形", triangleChecker.checkTriangleType(3, 3, 3*Math.sqrt(2))); } // 测试等腰钝角三角形 @Test void testIsoscelesObtuse() { assertEquals("等腰钝角三角形", triangleChecker.checkTriangleType(2, 2, 3.5)); } // 测试直角三角形 @Test void testRight() { assertEquals("直角三角形", triangleChecker.checkTriangleType(3, 4, 5)); assertEquals("直角三角形", triangleChecker.checkTriangleType(5, 12, 13)); } // 测试钝角三角形 @Test void testObtuse() { assertEquals("钝角三角形", triangleChecker.checkTriangleType(2, 3, 4)); assertEquals("钝角三角形", triangleChecker.checkTriangleType(5, 6, 10)); } // 测试锐角三角形 @Test void testAcute() { assertEquals("锐角三角形", triangleChecker.checkTriangleType(4, 5, 6)); assertEquals("锐角三角形", triangleChecker.checkTriangleType(7, 8, 9)); } // 测试非法输入 @Test void testInvalidInput() { assertThrows(IllegalArgumentException.class, () -> triangleChecker.checkTriangleType(0, 1, 2)); assertThrows(IllegalArgumentException.class, () -> triangleChecker.checkTriangleType(-1, 2, 3)); assertThrows(IllegalArgumentException.class, () -> triangleChecker.checkTriangleType(1, -2, 3)); } }

浙公网安备 33010602011771号