第三次软件工程作业

半城伤御伤魂 提交于 2020-01-24 10:37:15

软件工程作业-3

代码地址github


作业要求



最大连续子数组和(最大子段和):
给定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) 写出可运行的完整代码提交至GitHub或者Coding.net系统中,并将代码地址附到博客内

(2) 请从语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖五个覆盖标准中(条件组合覆盖难度较大,鼓励尝试,但请谨慎选择),任选一个标准设计测试用例

(3) 请利用自动测试工具对程序进行测试

(4) 请将程序运行结果和自动测试分析结果截图附到博客中


题目分析


给定一个数组,求最大子数组和.这个子数组从数组的任意位置开始,任意位置结束.采用for循环遍历数组,用变量sum来存储累加和,当然,sum值小于等于0的时候,被累加的这一段数组便被抛弃,从新的数组元素开始累加.每累加一次,便和存储最大值的max变量比较,如果比max大,就让max等于sum,防止sum在累加完后变小.最后输出max值即为最大子数组和.


测试过程分析


采用 条件组合覆盖 进行测试


条件选择的程序流程图


要满足每个判定条件的各种可能组合都至少出现一次,则abdf,abdef,acdf,acdef都要执行到,使用测试用例{0,2,-1,2}便可满足这一条件

测试过程

1.在eclipse中构建ArrayMaxSum类,编写测试代码

2.用数组{0,2,-1,2}和数组{0,-1,-1,0}进行运行

3.新建包arraymaxsum.Test用于测试,在包中新建用于测试ArrayMaxSum的测试类.并进行测试,测试用例为{0,2,-1,2}

代码

ArrayMaxSum类

package arraymaxsum;

import java.util.Scanner;

public class ArrayMaxSum {
    private static Scanner inputArray;
    
    public static void main(String[] args) {
        System.out.println("输入数组个数:");
        inputArray = new Scanner(System.in);
        int length = inputArray.nextInt();
        int[] array = new int[length];
        System.out.println("输入数字:");
        for(int i = 0; i < length; i++) {
            array[i] = inputArray.nextInt();
        }
        int result = arrayMaxSum(array);
        //System.out.println(array[2]);
        System.out.println("最大子数组和:"+result);
        
    }
    
    public static int arrayMaxSum(int[] array) {
        if (array.length == 0 || array == null) {
            return 0;
        }
        int sum = 0;
        int max = 0;
        for(int i = 0; i < array.length; i++) {
            if(sum <= 0) {
                
                sum = array[i];
            }
            else {
                sum += array[i];    
            }
            if(sum>max) {
                max = sum;  
            }
        }
        return max;
    }
}

ArrayMaxSumTest类

package arraymaxsum.Test;

import static org.junit.Assert.*;

import org.junit.Test;

import arraymaxsum.ArrayMaxSum;

public class ArrayMaxSumTest {

    int[] array = {0,2,-1,2};
    @Test
    public void testArrayMaxSum() {
        
        assertEquals(3,new ArrayMaxSum().arrayMaxSum(array));
    }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!