1.设计思想:首先定义几个变量以及整形数组,依据输入函数,确定数组的大小,并且输入数组的数值。
然后通过遍历数组的数值大小,比较出并找出子数组的最大值。
出现的问题:定义数组的时候因为不规范,导致最后输入数值的时候出错,这是由于平时的习惯导致的,所以以后必须改变。
其次就是for循环遍历子数组的时候,对于子数组的概念还没搞清楚就开始写代码,这是一个大忌,任何时候都应该先分析问题,然后才能去解决问题。
源代码:
package shuzu; import java.util.Scanner; public class ArrayMax { public static void main(String[] args){ int number,maxsum,maxstart; int i; Scanner in = new Scanner(System.in); System.out.println("请输入数组的大小:"); number=in.nextInt(); int array[]=new int[number]; System.out.println("请输入数组的值:"); for(i=0;i<number;i++) { array[i]=in.nextInt(); } maxsum=array[0]; maxstart=array[0]; for(i=1;i<number;i++) { if(maxstart<0) { maxstart=0; } maxstart+=array[i]; if(maxstart>maxsum) maxsum=maxstart; } System.out.println("子数组的最大和为:"); System.out.println(maxsum); in.close(); } }
全部是正整数的情况;
这种情况最简单,把所有的数组中的数值便利一遍即可得到最大值。
全是负数的情况:
这种情况和全是正整数的情况刚好相反,只需要通过for循环比较找到最大的哪个负数,输出就行。
有正有负:
这种情况是最复杂的,我们大多数人可能都会解决前两种情况,解决这个问题,首先从第一个数开始遍历,遍历完之后,从第二个数开始遍历,直到遍历完最后一个数,
在通过for循环比较出这些子数组中最大的那个输出就行。
总结:老师刚开始说出这个问题的时候,不知道如何解决,他就建议我们,一点一点的去分析问题,通过分析问题,把他分为若干个小问题。
1.想要完成这个题目首先要定义一个整数数组,这就要先定义几个变量。
2.定义完数组之后,就要输入数值,通过Scanner a=new Scanner(System.in)输入数值。
到这里问题已经解决了一部分,只剩下如何比较出最大的子数组
3.通过分析,遍历所有的子数组,然后通过for循环比较出结果。
这些都是我们以后要学习的宝贵经验,有利于解决未知的困难问题。