数组中最大的子数组之和,并对代码进行单元测试以及性能分析

一、程序分析

  1. 题目
    • 输入, 一个数组,和它的大小
    • 输出,这个数组中最大(连续)子数组之和
    • 例如

   

   本程序我采用idea集成开发工具编写的,使用的是java代码,代码如下:

 public class Array_son_maxnode_sum {
    //求数组的最大子数组之和函数
    public int maxSum(int[] array) {

        if (array == null || array.length == 0) {
            throw new IllegalArgumentException("array is null or empty.");
        }

        int result = array[0], mark = 0;

        for (int i = 0; i < array.length; i++) {
            int element = array[i];

            if (mark >= 0) {
                mark += element;
            } else {
                mark = element;
            }

            if (mark > result) {
                result = mark;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        Array_son_maxnode_sum maxSumOfSubArray = new Array_son_maxnode_sum();
        java.util.Scanner in=new java.util.Scanner(System.in);
        System.out.println("请输入数组的长度:");
        int size=in.nextInt();//数组的长度
        System.out.println("请输入该数组:");
        int []Array=new int[size];
        for(int num=0;num<size;num++)
            Array[num]=in.nextInt();
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }
} 

 

二、单元测试

在这里我用的是maven工具,它是基于项目对象模型,里面有许多jar包,我采用的是junit测试工具对以上代码进行测试,测试过程如下:

1、创建一个maven项目,并在pom.xml里面写对应的依赖,这里我们要使用的是junit工具,直接写junit依赖,如下图(2.1)

                                                                

                                                                                                    图2.1

要写的依赖代码如下:

<dependencies>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.6.2</version>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-runner</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.6.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

2.测试代码

将函数放入main文件中,将测试代码放入test文件中。

函数代码如下:

public class Funcation {
    //求数组的最大子数组之和函数
    public int maxSum(int[] array) {

        if (array == null || array.length == 0) {
            throw new IllegalArgumentException("array is null or empty.");
        }

        int result = array[0], mark = 0;

        for (int i = 0; i < array.length; i++) {
            int element = array[i];

            if (mark >= 0) {
                mark += element;
            } else {
                mark = element;
            }

            if (mark > result) {
                result = mark;
            }
        }
        return result;
    }
} 

我这里设计了10个测试用例,测试代码如下:

import org.junit.Test;

public class Test1 {
    Funcation maxSumOfSubArray = new Funcation();

    @Test
    public void test1(){
        int []Array={0,0,0,0,0};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test2(){
        int []Array={1, 5, 8, 9, 6};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test3(){
        int []Array={1,2,-4,0,-7};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test4(){
        int []Array={-6,-7,-8,-2,-1};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test5(){
        int []Array={1,-4,-7,6,-9};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test11(){
        int []Array={1,9,-8,-7,10};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test21(){
        int []Array={4,49,0,9,1,-9,-8};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test31(){
        int []Array={-7,-9,-5,1,2,3,4};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test41(){
        int []Array={10,23,45,-87,98,76,-100};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }

    @Test
    public void test51(){
        int []Array={1,2,-3,-4,-1,-2,-9};
        int maxSum = maxSumOfSubArray.maxSum(Array);
        System.out.println(maxSum);
    }
}

 

3、测试成功截图(如下图)

                    

                                                                                                          图 2.2

 

三、性能分析

我这里使用的是JProfiler性能分析工具,性能分析过程如下:

1、先下载一个JProfiler工具

2、在idea下载一个JProfiler插件(如下图3.1)

                                                                                                                                   图3.1
3.在上面那个图点击JProfiler,将JProfiler软件地址配置好(如下图3.2)

                                                                                                                               图3.2

4、使用JProfiler进行性能分析,结果如下

所有对象的实时内存截图:

 

总体概览如下:

 

posted @ 2021-03-13 20:13  锅盔灬  阅读(183)  评论(1编辑  收藏  举报