软件工程第三次作业

一.题目要求

题目(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。

二.具体步骤

1.设计思路

本体的要求是求一组数的最大字段和,所以首先我们可以定义一个数组将该序列所有的数储存起来,之后定义两个数初始值为0的数,第一个用来存储当前计算出来的子数和,第二个存储上一轮计算后保存下来的子数和。每进行一次计算和后就对两个数进行一次比较,将大的数存入第二个数中。当最后子段和值小于0时,则输出0。

2.代码展示

3.样例测试

4.流程图

5.上传

[github] (https://github.com/vergilspata/learning/blob/master/homework03)

三.单元测试

1.覆盖方法

    本次试验中我使用的为判定-条件覆盖

(1)语句覆盖

(2)判定覆盖

(3)条件覆盖

(4)判定-条件覆盖

(5)条件组合覆盖

2.测试使用的路径

(1)firstsum<secondsum secondsum<=0
(2)firstsum0
(3)firstsum>secondsum secondsum<=0
(4)firstsum>secondsum secondsum>0
所使用测试例子
(1){-5,-9,-11,-20,-25}) 最大子段和:0

(2){-12,5,4,11,-13} 最大子段和:20

(3){-8,2,-3,14,-5} 最大子段和:14

(4){1,3,5,7,9} 最大子段和:25

3.测试代码与结果

package train3;

import static org.junit.Assert.*;

import org.junit.Test;

public class test01 {

@Test
public void test001() {
	int a[]= {-5,-9,-11,-20,-25};
	assertEquals(0, Max.maxsum(a));
}
@Test
public void test002() {
	int a[]= {-12,5,4,11,-13};
	assertEquals(20, Max.maxsum(a));
}
@Test
public void test003() {
	int a[]= {-8,2,-3,14,-5};
	assertEquals(14, Max.maxsum(a));
}
@Test
public void test004() {
	int a[]= {1,3,5,7,9};
	assertEquals(25, Max.maxsum(a));
}

}

posted @ 2018-03-31 13:40  vergil_spata  阅读(142)  评论(0编辑  收藏  举报