程序设计思路:
有数组Array[10], 先设置两个变量sum和max,一个存贮子数组的和,一个存贮和的最大值,先令sum=Array[0] max=Array[0],然后用循环遍历数组的每一个数,如果sum+Array[1]> sum那么将sum更新为sum+Array[1],如果更新的sum大于max那么将max更新为sum。如果sum+Array[1]<0那么令sum=0,再往后查找别的子数组。如果sum+第二个数的值大于0小于sum,令sum=sum+Arrar[1]。
程序源代码:
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 int sum=Array[0]; 6 for(int i=1;i<10;i++){ 7 if(sum+Array[i]>=sum){ 8 sum=sum+Array[i]; 9 if(sum>max){ 10 max=sum;} 11 } 12 else if(sum+Array[i]<0){ 13 sum=0; 14 } 15 else{ 16 sum=sum+Array[i]; 17 } 18 } 19 System.out.println("和最大的子数组的和为:"+max); 20 } 21 }
运行结果截屏:
问题分析:
在运算子数组和的时候,比较加上下一数据项和已存在子数组的和相比较,在和小于原盒的时候直接归零了,导致算出的和最大值有误!
即令sum+Array[i]<sum)直接使sum=0,出现错误
总结:
在写程序的时候应该先想好思路,想清楚算法,不然容易出现错误