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));
    }
}

 

posted @ 2025-04-28 15:15  KuanDong24  阅读(17)  评论(0)    收藏  举报