软件工程第三次个人作业
软件工程第三次个人作业
1,项目选择
本次作业有两种选择,我选的是第一个作业,描述如下:
题目(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。
-- 引用自《百度百科》
2,解决思路
- (1)设计方法
本次作业与上次作业一样,我采用的是JAVA编程,用的是Eclipse编译。对于本体如何求最大字段和。先设一个变量MAX保存,最大值。再设一个SUM变量保存各个字段和,再与MAX进行比较,最大的放在,MAX中进行保存。在进行从a[i]到a[n];的遍历。、 - (2)部分代码
下面的代码主要的表达是从保存最大值的问题,我是在一个子函数中进行寻找最后返回的,并将最大值保存到MAXD中,最后经性判断和输出:
public static int themax(int n ,int b[]) {
int sum=0,maxd=0,i,j;
for(i=0;i<n;i++) {
sum=0;
for(j=0;j<n-i;j++) {
sum+=b[i+j];
if(maxd<sum) {
maxd=sum;
}
}
}
return maxd;
}
- (3),程序代码
在上面展示了代码的一部分下面是完整的程序代码,从输入到返回最大值,在到最后的判断是否全部为负数:
package CHECK;
import java.util.Scanner;
public class asdf {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("输入数字长度:");
int n=in.nextInt();
int a[]=new int[50];
int i,max;
System.out.println("输入元素:");
for(i=0;i<n;i++) {
a[i]=in.nextInt();
}
max=themax(n,a) ;
if(max<0) {
System.out.println(0);
}
else {
System.out.println("最大值为"+max);
}
}
public static int themax(int n ,int b[]) {
int sum=0,maxd=0,i,j;
for(i=0;i<n;i++) {
sum=0;
for(j=0;j<n-i;j++) {
sum+=b[i+j];
if(maxd<sum) {
maxd=sum;
}
}
}
return maxd;
}
}
3,代码测试部分
在代码测试的阶段我所采用的是.语句覆盖,组合覆盖,条件覆盖,这三种判定方法。在测试阶段我设计了几种不同的条件进行判别。代码如下。
package CHECK;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class Asdcheck {
@Test
public void asdtest() {
int a1[]={1,2,3,4,5};
int answer=CHECK.asdf.themax(5, a1);
assertEquals(15,answer);
}
@Test
public void asdtest1() {
int a1[]={-2,11,-4,13,-5,-2};
int answer=CHECK.asdf.themax(6, a1);
assertEquals(20,answer);
}
@Test
public void asdtest2() {
int a1[]={-1,-2,-3,-4,-5};
int answer=CHECK.asdf.themax(5, a1);
assertEquals(0,answer);
}
}
下图是代码的截图

下图为测试时的截图:

总结
本次作业进行的不是很顺利,对于JAVA语言的编写不是很熟悉,所以我事先在codeblocks用C语言进行编译,再在eclipse编译的。不过在转换的过程中,我对于JAVA的认知更加准确,对于junit自动测试的编写更加的熟悉,也知道了一些方法和技巧。
这次的作业让我收获了很多,对于程序的构建,设计有了自己的认识。同样也认识到了自身的不足和缺点。这些都需要进行改进的地方。
codeing链接:https://coding.net/u/wa_o/p/ruangong/git/commit/4494b446b1d5f574516d65066be4425eb5bb2919?public=true
浙公网安备 33010602011771号