软件工程结对作业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.测试时要实验各种数据,得出软件的不足之处,进行修改。

posted @ 2017-03-31 17:35  丶枫  阅读(161)  评论(0编辑  收藏  举报