码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程第三次作业

时间:2018-03-31 15:10:31      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:++   https   9.png   void   post   sub   定义   div   覆盖   

1.问题背景

最大连续子数组和(最大子段和)

给定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。
-- 引用自《百度百科

2.程序设计

一.待测函数




package demo0;
public class CalMaxSub{
   public int Cal(int array[] ) {
    
        int sum =0;//记录子数组的和

        for (int i = 0; i <array.length; i++)
        {
            for (int j = i ; j < array.length; j++)
            {
                int cursum=0;//所遍历出来的子数组的和
                //计算遍历的子数组之和
                for (int k = i; k <= j; k++)
                {
                    cursum += array[k];
                }
                //找出最大的子数组
                if (cursum>sum)
                {
                    sum = cursum;//更新sum为最大值
                   
                }
            }
        }
        
        return sum;
}
}

技术分享图片

二.测试函数


package demo0;
import static org.junit.Assert.*;

import org.junit.Test;

public class CalMaxSubTest {

     @Test
     public void Cal0(){
         int a0[]=new int[]{1,1,1,1,1,1};//全正数
        assertEquals(6, new CalMaxSub().Cal(a0));
 }
    @Test
    public void Cal1(){
        int a1[]=new int[]{-1,-1,-1,-1,-1,-1};//全负数
        assertEquals(0, new CalMaxSub().Cal(a1));
}
    @Test
    public void Cal2(){
        int a2[]=new int[]{1,-1,-1,-1,-1,-1};//部分整数
        assertEquals(1, new CalMaxSub().Cal(a2));}
    @Test
    public void Cal3(){
        int a3[]=new int[]{-2,11,-4,13,-5,-2};//标准用例
        assertEquals(20, new CalMaxSub().Cal(a3));}
}

技术分享图片

3.流程图

技术分享图片

4.单元测试

由于程序中判定和条件较少,可以考虑采用条件组合覆盖,用例如下:
{1,1,1,1,1,1}
{-2,11,-4,13,-5,-2}

判定条件 覆盖路径
cursum>sum abcef
cursum<=sum abdef

同时额外追加两组用例
{-1,-1,-1,-1,-1,-1}
{1,-1,-1,-1,-1,-1}
测试结果符合预期,见下图:
技术分享图片

5.总结

通过这次作业,更加熟悉单元测试流程,对整个软件开发设计环节有了基本的认识。当然,这期间也存在许多不足,对JAVA不是很熟悉,走了不少弯路,思维固化在面向过程上,希望后续能有突破吧。

软件工程第三次作业

标签:++   https   9.png   void   post   sub   定义   div   覆盖   

原文地址:https://www.cnblogs.com/quin-0x07/p/8660587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!