团队开发照片:
设计思路:
源代码第四行: 设置最大值变量(用来存放二维子数组和的最大值)
源代码第五行: 在一维子数组和的求值上的基础上,在最外层再加循环。{
源代码第六到十九行: 求一维子数组和的最大值;
源代码第二十到二十四行: 把一维子数组错位使最后一个数成为第一个数,第一个数成为第二个数......
源代码第二十五到二十七行: 如果最大值(二维)小于这次循环的数组子数组和的最大值(一维),更新最大值(二维);
}
源代码第二十九行: 得到并显示二维子数组和的最大值。
程序源代码:
1 public class Test2 { 2 public static void main(String args[]){ 3 int Array[]={0,1,5,-4,9,10,54,-6,-34,78}; 4 int MAX=Array[0]; 5 for(int ii=0;ii<10;ii++){ 6 int max=Array[0];int sum=Array[0]; 7 for(int i=1;i<10;i++){ 8 if(sum+Array[i]>=sum){ 9 sum=sum+Array[i]; 10 if(sum>max){ 11 max=sum;} 12 } 13 else if(sum+Array[i]<0){ 14 sum=0; 15 } 16 else{ 17 sum=sum+Array[i]; 18 } 19 } 20 int a=Array[0]; 21 for(int iii=0;iii<9;iii++){ 22 Array[iii]=Array[iii+1]; 23 } 24 Array[9]=a; 25 if(MAX<max){ 26 MAX=max; 27 }28 } 29 System.out.println("和最大的子数组的和为:"+MAX); 30 } 31 }
运行结果截图:
思考总结及问题分析:
在刚开始编写代码的时候,将子数组和的最大值(一维)定义在外层循环的外面,导致每次在计算以为子数组和的最大值的时候,变量没有初始化,计算出的最大值是一个很大的值。在以后的编程中应该注意数值的初始化,尤其在多层循环中,单层算法中变量的初始化是非常重要的。