数组中最大的子数组之和,并对代码进行单元测试以及性能分析
一、程序分析
- 题目
- 输入, 一个数组,和它的大小
- 输出,这个数组中最大(连续)子数组之和
- 例如
本程序我采用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.2
4、使用JProfiler进行性能分析,结果如下
所有对象的实时内存截图:
总体概览如下: