软件工程第三次作业

最大连续子数组和

一、作业题目描述

最大连续子数组和: 给定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));
	}

}

7.测试结果

posted @ 2019-04-20 21:28  zqy123  阅读(120)  评论(0编辑  收藏  举报