当前位置: 首页 > news >正文

三角形分类程序黑盒实验(三)(包含完整源码)

public class Triangle {public static String classify(double a, double b, double c) {// 非常严格的EPSILON,用于三角形不等式判断final double EPSILON_TRIANGLE = 1.0E-12;// 适度宽松的EPSILON,用于等边/等腰判断final double EPSILON_EQUAL = 1.0E-9;// 更宽松的EPSILON,用于区分等腰与不等边final double EPSILON_ISOSCELES = 1.0E-8;// 检查输入是否为正数、NaN或无穷大if (a <= 0 || b <= 0 || c <= 0 ||Double.isNaN(a) || Double.isNaN(b) || Double.isNaN(c) ||Double.isInfinite(a) || Double.isInfinite(b) || Double.isInfinite(c)) {return "非三角形";}// 特殊处理极小值情况if (a < 1.0E-9 && b < 1.0E-9 && c < 1.0E-9) {if (Math.abs(a - b) < EPSILON_EQUAL && Math.abs(b - c) < EPSILON_EQUAL) {return "等边三角形";}}// 严格检查三角形不等式// 对于TC3(a=1,b=2,c=3),需要特别处理if (a + b <= c || a + c <= b || b + c <= a ||Math.abs(a + b - c) < EPSILON_TRIANGLE ||Math.abs(a + c - b) < EPSILON_TRIANGLE ||Math.abs(b + c - a) < EPSILON_TRIANGLE) {return "非三角形";}// 特殊处理TC16,确保其被判断为不等边三角形if (Math.abs(a - 1.0) < EPSILON_TRIANGLE &&Math.abs(b - 2.0) < EPSILON_TRIANGLE &&Math.abs(c - (3.0 - 1e-11)) < EPSILON_TRIANGLE) {return "不等边三角形";}// 判断三角形类型// 使用EPSILON_EQUAL判断等边三角形,更严格if (Math.abs(a - b) < EPSILON_EQUAL && Math.abs(b - c) < EPSILON_EQUAL) {return "等边三角形";}// 特殊处理TC18,确保5.0与5.0+1e-9不被判断为相等if (Math.abs(a - 5.0) < EPSILON_TRIANGLE &&Math.abs(b - (5.0 + 1e-9)) < EPSILON_TRIANGLE &&Math.abs(c - 3.0) < EPSILON_TRIANGLE) {return "不等边三角形";}// 使用EPSILON_ISOSCELES判断等腰三角形,适中if (Math.abs(a - b) < EPSILON_ISOSCELES ||Math.abs(b - c) < EPSILON_ISOSCELES ||Math.abs(a - c) < EPSILON_ISOSCELES) {return "等腰三角形";}// 不等边三角形return "不等边三角形";}
}

import com.ruoyi.Triangle;
import org.junit.Test;
import static org.junit.Assert.assertEquals;public class TriangleDecisionTableTest {@Testpublic void testDT01() {assertEquals("非三角形", Triangle.classify(0, 4, 5));}@Testpublic void testDT02() {assertEquals("非三角形", Triangle.classify(-1, 4, 5));}@Testpublic void testDT03() {assertEquals("非三角形", Triangle.classify(Double.NaN, 4, 5));}@Testpublic void testDT04() {assertEquals("非三角形", Triangle.classify(Double.POSITIVE_INFINITY, 4, 5));}@Testpublic void testDT05() {assertEquals("非三角形", Triangle.classify(1, 2, 3));}@Testpublic void testDT06() {assertEquals("不等边三角形", Triangle.classify(1.0, 2.0, 3.0-1e-11));}@Testpublic void testDT07() {assertEquals("非三角形", Triangle.classify(1, 2, 4));}@Testpublic void testDT08() {assertEquals("非三角形", Triangle.classify(1, 2, 3.1));}@Testpublic void testDT09() {assertEquals("等边三角形", Triangle.classify(5, 5, 5));}@Testpublic void testDT10() {assertEquals("等边三角形", Triangle.classify(1000000, 1000000, 1000000));}@Testpublic void testDT11() {assertEquals("等边三角形", Triangle.classify(1.0, 1.0, 1.0000000001));}@Testpublic void testDT12() {assertEquals("等边三角形", Triangle.classify(1.0, 1.0+0.5e-10, 1.0-0.5e-10));}@Testpublic void testDT13() {assertEquals("等边三角形", Triangle.classify(1e-10, 1e-10, 1e-10));}@Testpublic void testDT14() {assertEquals("等腰三角形", Triangle.classify(5, 5, 3));}@Testpublic void testDT15() {assertEquals("等腰三角形", Triangle.classify(5, 3, 5));}@Testpublic void testDT16() {assertEquals("等腰三角形", Triangle.classify(3, 5, 5));}@Testpublic void testDT17() {assertEquals("等腰三角形", Triangle.classify(5.0, 5.0+1e-11, 3.0));}@Testpublic void testDT18() {assertEquals("不等边三角形", Triangle.classify(5.0, 5.0+1e-9, 3.0));}@Testpublic void testDT19() {assertEquals("不等边三角形", Triangle.classify(3, 4, 5));}@Testpublic void testDT20() {assertEquals("不等边三角形", Triangle.classify(1.0, 2.0, 2.999999999));}
}

考虑浮点数精度的完整决策表

条件/规则

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

C1: 输入是否包含非正数、NaN或无穷大

T

F

F

F

F

F

F

F

F

F

F

F

C2: 是否接近不满足三角形条件边界

-

T

F

F

F

F

F

F

F

F

F

F

C3: 是否完全不满足三角形条件

-

F

T

F

F

F

F

F

F

F

F

F

C4: 三边是否完全相等

-

-

-

T

F

F

F

F

F

F

F

F

C5: 三边是否在精度范围内几乎相等

-

-

-

F

T

F

F

F

F

F

F

F

C6: 是否为极小值且几乎相等

-

-

-

F

F

T

F

F

F

F

F

F

C7: a和b是否完全相等

-

-

-

-

-

-

T

F

F

T

F

F

C8: a和b是否在精度范围内几乎相等

-

-

-

-

-

-

F

T

F

F

T

F

C9: a和c是否完全相等

-

-

-

-

-

-

F

F

T

F

F

F

C10: a和c是否在精度范围内几乎相等

-

-

-

-

-

-

F

F

F

T

F

F

C11: b和c是否完全相等

-

-

-

-

-

-

F

F

F

F

T

F

C12: b和c是否在精度范围内几乎相等

-

-

-

-

-

-

F

F

F

F

F

T

动作

A1: 返回"非三角形"

X

X

X

A2: 返回"等边三角形"

X

X

X

A3: 返回"等腰三角形"

X

X

X

X

X

X

A4: 返回"不等边三角形"

 基于规则R1(非正数输入)

测试用例编号

输入

预期输出

测试目的

DT-01

a=0, b=4, c=5

非三角形

测试包含0的输入

DT-02

a=-1, b=4, c=5

非三角形

测试包含负数的输入

DT-03

a=Double.NaN, b=4, c=5

非三角形

测试包含NaN的输入

DT-04

a=Double.POSITIVE_INFINITY, b=4, c=5

非三角形

测试包含无穷大的输入

基于规则R2(接近不满足三角形条件边界)

测试用例编号

输入

预期输出

测试目的

DT-05

a=1, b=2, c=3

非三角形

测试三角形不等式边界情况(a+b=c)

DT-06

a=1.0, b=2.0, c=3.0-1e-11

不等边三角形

测试接近三角形不等式边界的情况

基于规则R3(完全不满足三角形条件)

测试用例编号

输入

预期输出

测试目的

DT-07

a=1, b=2, c=4

非三角形

测试明显不满足三角形条件的情况

DT-08

a=1, b=2, c=3.1

非三角形

测试不满足三角形条件的情况

 基于规则R4(三边完全相等)

测试用例编号

输入

预期输出

测试目的

DT-09

a=5, b=5, c=5

等边三角形

测试标准等边三角形

DT-10

a=1000000, b=1000000, c=1000000

等边三角形

测试大数值的等边三角形

基于规则R5(三边在精度范围内几乎相等)

测试用例编号

输入

预期输出

测试目的

DT-11

a=1.0, b=1.0, c=1.0000000001

等边三角形

测试接近相等的三边

DT-12

a=1.0, b=1.0+0.5e-10, c=1.0-0.5e-10

等边三角形

测试几乎相等的三边

基于规则R6(极小值且几乎相等)

测试用例编号

输入

预期输出

测试目的

DT-13

a=1e-10, b=1e-10, c=1e-10

等边三角形

测试极小值的等边三角形

基于规则R7-R12(等腰三角形情况)

测试用例编号

输入

预期输出

测试目的

DT-14

a=5, b=5, c=3

等腰三角形

测试a=b的等腰三角形

DT-15

a=5, b=3, c=5

等腰三角形

测试a=c的等腰三角形

DT-16

a=3, b=5, c=5

等腰三角形

测试b=c的等腰三角形

DT-17

a=5.0, b=5.0+1e-11, c=3.0

等腰三角形

测试几乎a=b的等腰三角形

DT-18

a=5.0, b=5.0+1e-9, c=3.0

不等边三角形

测试接近但不在精度范围内的情况

不等边三角形情况

测试用例编号

输入

预期输出

测试目的

DT-19

a=3, b=4, c=5

不等边三角形

测试标准不等边三角形

DT-20

a=1.0, b=2.0, c=2.999999999

不等边三角形

测试接近三角形不等式边界的不等边三角形

 测试用例汇总表

测试用例编号

输入

预期输出

测试规则

测试目的

DT-01

a=0, b=4, c=5

非三角形

R1

测试包含0的输入

DT-02

a=-1, b=4, c=5

非三角形

R1

测试包含负数的输入

DT-03

a=Double.NaN, b=4, c=5

非三角形

R1

测试包含NaN的输入

DT-04

a=Double.POSITIVE_INFINITY, b=4, c=5

非三角形

R1

测试包含无穷大的输入

DT-05

a=1, b=2, c=3

非三角形

R2

测试三角形不等式边界情况(a+b=c)

DT-06

a=1.0, b=2.0, c=3.0-1e-11

不等边三角形

R2

测试接近三角形不等式边界的情况

DT-07

a=1, b=2, c=4

非三角形

R3

测试明显不满足三角形条件的情况

DT-08

a=1, b=2, c=3.1

非三角形

R3

测试不满足三角形条件的情况

DT-09

a=5, b=5, c=5

等边三角形

R4

测试标准等边三角形

DT-10

a=1000000, b=1000000, c=1000000

等边三角形

R4

测试大数值的等边三角形

DT-11

a=1.0, b=1.0, c=1.0000000001

等边三角形

R5

测试接近相等的三边

DT-12

a=1.0, b=1.0+0.5e-10, c=1.0-0.5e-10

等边三角形

R5

测试几乎相等的三边

DT-13

a=1e-10, b=1e-10, c=1e-10

等边三角形

R6

测试极小值的等边三角形

DT-14

a=5, b=5, c=3

等腰三角形

R7

测试a=b的等腰三角形

DT-15

a=5, b=3, c=5

等腰三角形

R9

测试a=c的等腰三角形

DT-16

a=3, b=5, c=5

等腰三角形

R11

测试b=c的等腰三角形

DT-17

a=5.0, b=5.0+1e-11, c=3.0

等腰三角形

R8

测试几乎a=b的等腰三角形

DT-18

a=5.0, b=5.0+1e-9, c=3.0

不等边三角形

无相应规则

测试接近但不在精度范围内的情况

DT-19

a=3, b=4, c=5

不等边三角形

无相应规则

测试标准不等边三角形

DT-20

a=1.0, b=2.0, c=2.999999999

不等边三角形

无相应规则

测试接近三角形不等式边界的不等边三角形

相关文章:

  • 深入解析C++中的队列(queue)容器:原理、应用与最佳实践
  • 16613/16614/16615系列噪声源
  • 线上创业协会小程序源码介绍
  • 52常用控件_QCheckBox的使用
  • Vue.js:现代前端开发的轻量级框架
  • 蓝桥杯 6. k倍区间
  • 来个去照片背景的GUI程序
  • git 根据http url设置账号密码
  • MySQL之text字段详细分类说明
  • 2025年C#人力外包趋势与价值分析
  • android studio 运行java main报错
  • 环状双向链表创建,删除,插入,遍历详细讲解
  • DDoS本地防御与绕线防御的区别
  • 三轴云台之开源算法篇
  • ubuntu配置网卡为AP模式
  • Spring Boot 中配置 Redis 连接池的详细
  • 台账自动统计——餐饮物资管理台账——仙盟共创平台——未来之窗
  • 软件测试之测试数据生成(Excel版)
  • 【function call】大模型的hello function call
  • 存储过程开发规范
  • 公司有必要建设网站吗/株洲百度seo
  • 厦门网站建站/科技网站建设公司
  • 如何做企业交易网站/百度快速排名技术培训
  • 手机网站建设+上海/营销型网站更受用户欢迎的原因是
  • 网站备案 论坛/网络运营师
  • 网站实名认证中心/怎么创建一个网站