软件工程第三次作业
最大连续子数组和
一、作业题目描述
最大连续子数组和: 给定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。
二、实际代码
题目实际代码如下所示:
package qiumax;
public class Max {
public static void main(String[] args)
{
int [] arr= new int[4];
int maxsum=getmax(arr);
System.out.println(maxsum);
}
public static int getmax(int[] arr)
{
if(arr.length==0)
{
return 0;
}
int sum=0;
int maxsum=0;
for(int i=0;i<arr.length;i++)
{
sum=sum+arr[i];
if(sum<0)
{
sum=0;
}
if(sum>maxsum)
{
maxsum=sum;
}
}
return maxsum;
}
}
可运行代码地址GitHub
三、单元测试
1.选择方式
条件组合覆盖
2.流程图
3.判断分析
要求每个判定条件都出现其中共有四个条件
(1)判断长度:arr.length=0或arr.length>0
(2)判断i的值:i>=arr.length或arr.length
(3)判断sum的值:sum>=0或sum<0
(4)判断maxsum的值:maxsum>sum或maxsum<sum
4.条件组合覆盖方式的可能组合
1.arr.length=0;
2.arr.length>0,sum>0,maxsum>sum
3.arr.length>0,sum>0,maxsum<sum
4.arr.length>0,sum<0,maxsum>sum
5.测试数据
1.{}
2.{-2,3,-1,6}
6.测试代码
测试代码如下:
class MaxTest {
int[] arr= {-2,3,-1,6};
@Test
void testGetmax() {
assertEquals(8,new Max().getmax(arr));
}
}