软件工程第二次作业

软件工程第二次作业

博客信息 沈阳航空航天大学计算机学院2020软件工程作业
作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10583
课程目标 熟悉一个“高质量”软件的开发过程
作业目标 单元测试练习

最大连续子数组和:

本题选择了最大连续子数组和这个问题作为测试的对象。

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

刚开始看这个题目感觉很复杂。刚开始的想法是把给定的数组分别求各种组合的值最后判断他的最大值,但这个问题其实很简单。
代码如下:
链接:https://github.com/Trumpetertimes/Trumpetertimes-dock/blob/master/For the second homework of SE

package org.test2.demo;
public class Test2
{
	int arr[];
	public Test2()
	{
		
	}
	public Test2(int arr[])
	{
		this.arr=arr;
	}
	
	
	public int max()
	{
	    int sum,maxsum;
	    int i ;
	    sum = maxsum = 0;
	    for(i = 0;i<arr.length;i++)
	    {
	        sum +=arr[i];
	        if(sum>maxsum)
	            maxsum = sum;
	        if(sum<0)
	            sum = 0;
	    }
	    return maxsum;
	}
        public static void main(String arg[])
    {
    	int arr[]=new int[100];
    	String judge=null;
    	Scanner s=new Scanner(System.in);
    	System.out.println("输入数组,以数字0结束");
    	for(int i=0;Integer.parseInt(judge=s.nextLine())!=0;i++)
    	{
    		arr[i]=Integer.parseInt(judge);
    	}
    	Test2 test2=new Test2(arr);
    	System.out.print(test2.max());
    	s.close();
    }
}

测试:

使用eclipse的junit来进行自动测试,选择语句覆盖+判定覆盖的方法进行测试。
其中junit需要在当前创建的项目中引入。eclipse版本比较新吧,默认选择的junit5进行测试。


以下是新创建的测试类:

import org.test2.demo.*;
import junit.framework.*;
public class Test extends TestCase
{
	public void testArray()
	{
		int arr1[]= {1,2,3,-1,-2,9};
		int arr2[]= {-2,11,-4,13,-5,-2};
		int arr3[]= {-8,-2,-2,1,-2};
		Test2 array=new Test2(arr1);
		assertTrue(array.max()==12);
		Test2 array2=new Test2(arr2);
		assertTrue(array2.max()==20);
		Test2 array3=new Test2(arr3);
		assertTrue(array3.max()==0);
	}

}

这样构造函数和每一条语句以及每个判断都得到了运行。
选择runas junit,第一次运行结果如下所示:
![avatar](img src="https://www.cnblogs.com/Trumpetertimes/gallery/image/301739.html" class="desc_img")
运行失败,和所需的结果不同。
发现在第16行出现了问题,结果是给的数组值有问题,看来Junit还是挺管用的。修改了数组,再次运行,结果正确。
如下图所示:
![openSUSE-laptop](img src="https://www.cnblogs.com/Trumpetertimes/gallery/image/301740.html" class="desc_img")
工作记录表

项目 记录结果
日期 2020.4.2
开始时间 21:29
结束时间 22:30
编码行数 67
错误数量 1
错误1 设定的数组结果不对
错误1修改时间 21:59
原文地址:https://www.cnblogs.com/Trumpetertimes/p/12623366.html