一、题目描述###
给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
二、编译环境###
此次变成采用java编程,ide为eclipse。
三、问题分析###
1.算法描述####
可以把这个问题分成两个个小的问题:1.各子段的值。2.怎么取这所有子段中的最大值。
解决1.各子段的值就可以看成遍历一个元素就得到一个子段的值,保留前一个子段的值,用新遍历的元素与前一个子段进行求和,得到新的子段值。
解决2.正因为取的是最大值,所以比较的话就可以从两个数之间进行比较,小的淘汰,大的替换现有max。
2.关键代码####
3.流程图####
四、单元测试###
1.覆盖方法:
(1)语句覆盖:选择合适用例,所有语句被执行一次。
语句覆盖是指选择足够的测试用例,使得运行这些测试用例时,被测程序的每一个语句至少执行一次,其覆盖标准无法发现判定中逻辑运算的错误。
(2)判定覆盖:每个判定至少取一次真、一次假。
判定覆盖是设计足够多的测试用例,使得程序中的每一个判断至少获得一次“真”和一次“假”,即使得程序流程图中的每一个真假分支至少被执行一次。
(3)条件覆盖:每个条件的各种可能结果至少满足一次。
条件覆盖是指选择足够的测试用例,使得运行这些测试用例时,判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支。
(4)判定条件覆盖:同时满足判断覆盖和条件覆盖。
判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。缺点是忽略了条件的组合情况。
(5)条件组合覆盖:所有组合情况都要覆盖一次。
在白盒测试法中,选择足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然,满足“条件组合覆盖”的测试用例是一定满足“判定覆盖”、“条件覆盖”和“判定/条件覆盖”的。
2.所选定的覆盖方法:####
(1)判定条件覆盖####
(2)所选用例:####
{0,0,0,0,0}
{-3,5,-7,4,6}
{-4,-2,-6,8,2}
{1,2,3,5,4}
{-2,-3,-4,-5,-6}
五、测试结果展示###
六、代码清单###
coding:https://git.coding.net/qbingo/homework3.git
七、心得与体会###
难度比前两次大很多,也查阅了很多资料,询问了组员很多相关问题,让我在枯燥的编程中找到了乐趣,但这只是开始还需要更多的努力。