设计思想:
遍历一个数组,如果一个数小于0,就重新开始计算,如果大于0就进行相加。
代码:
package subarraymaxadd; import java.util.*; public class Subarraymaxadd { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入数组长度:"); int len = input.nextInt(); int[] arr = new int[len]; System.out.println("请输入数组:"); for(int i=0;i<len;i++) { arr[i] = input.nextInt(); } input.close(); if(len==0||arr==null) { System.out.println("输入无效!"); } int cursum = arr[0]; int maxsum = Integer.MIN_VALUE; for(int i=0;i<len;i++) { if(cursum<=0) { cursum=arr[i]; } else { cursum+=arr[i]; } if(maxsum<cursum) { maxsum=cursum; } } System.out.println("子数组的最大和为:"+maxsum); } }
结果截图:
总结:
本次测验一开始想的是先前两个数加,大于0就接着往下遍历,小于0就判断前两个数,但运行阶段不能得出结果;还有arr[i+1]有超过范围,还是要更加细心。