软件工程结对作业01---返回一个整数数组中最大子数组的和
题目:

设计思想:
先输入数组的长度n,创建一个2n-1长的数组(循环数组,循环前n-1个数),输入数字并同步到后面循环的数。最大子数组只能以正数开头结尾,查找前n个数中的正数,以其为开头,n为长度的数组中找最大子数组;若无正数找出最大的负数。设置开头和长度作为子数组输出的标准,并在得出较大子数组时修改数据;最后输出最大子数组。
出现的问题:
全负数时,长度设为1时,只对第一个最大有效。后改为0。
可能的解决方案(多选):
找出所有正数,以其为头尾得出最大子数组;全负数时找最大负数。
源代码:
package shuzu;
import java.util.Scanner;
public class max {
public static void main(String[] args) {
System.out.println("请输入数组长度:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();//数组长度
int [] a = new int [2 * n - 1];//循环数组转化为普通数组
System.out.println("请输入数组:");
for(int i = 0;i < n;i++)
{
a[i] = s.nextInt();
if(i < n - 1)
a[i + n] = a[i];//重复前n-1个
}
int max = a[0], begin = 0, length = 0;
//求最大子数组
for(int i = 0;i < n;i++)
{
if(a[i] > 0)//最大子数组头尾为正数
{
int m = 0;
for(int j = 0;j < n;j++)//加后面n-1个数之内,查看最大子数组
{
m += a[j + i];
if(m > max)
{
begin = i;
length = j;
max = m;
}
}
}
else//全为负数,找出最大负数
{
if(a[i] > max)
{
begin = i;
length = 0;
max = a[i];
}
}
}
System.out.println("数组最大子数组:");
for(int i = begin;i <= begin + length;i++)
System.out.print(a[i] + " ");
s.close();
}
}
结果截图:

总结:
1.在书写代码时需要有详细的计划,这样做起来会很省力。
2.双人讨论能促进思想的碰撞,得出更好的idea。
3.测试时要实验各种数据,得出软件的不足之处,进行修改。

浙公网安备 33010602011771号