第二周作业:返回一个整数数组中最大子数组的和

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循环比较出结果。

这些都是我们以后要学习的宝贵经验,有利于解决未知的困难问题。 

猜你喜欢

转载自www.cnblogs.com/1502762920-com/p/10502569.html