课堂练习2
设计思想:在数组中,如果数组为空则返回零,如果不是则从第一个数开始相加,如果和大于第一个数或者相等,则把值赋值给最大的值,如果和小于零,则把前面的和赋值为零,从下一个开始相加。(与此同时,判断最大值是否小于下一个值,如果小于或者相等,则赋值过去)
出现的问题:①在写第一种的方案中的时候,正数和正负数混合的时候正确,但是全是负数的时候是错误的。
解决方案:在比较的时候出现了问题
public class math2 { public static void main(String[] ages) { math2 f=new math2(); int arr[]={-5,-1,-17,-8,-9}; System.out.println("MaxSum:"+f.findMaxSum(arr)); } public int findMaxSum(int[] arr) { int cSum=0; //定义一个初始的值来求和 int maxSum=arr[0]; //定义最大值为数组的第一个数 int len=arr.length; //数组的长度 if(arr==null||len==0) { return (Integer) null; //如果数组为空或者长度为0,返回空 } for(int i=0;i<len;i++) { cSum+=arr[i];//求和 if(cSum>maxSum||maxSum==cSum) { maxSum=cSum; } if(cSum<0) {//如果和小于0,则将值还赋值为0 cSum=0; /*if(maxSum<arr[i]||maxSum==arr[i]) { ;maxSum=arr[i]; }*/ } } if(maxSum==0) { for(int i=0;i<len;i++) { if(arr[i]>maxSum) { maxSum=arr[i]; } } } return maxSum; } }
5,-1,17,-8,9
5,1,17,8,9
总结: 在写代码的过程中一定要细心,不应该出一点点的错误,而且层次要分明