设计思想:这只是再上一个题目上做了一些改进,主要的不同点在于不知道循环数组的起点,所以我就创建一个最大长度的子数组,从任意一个数开始一次赋值给子数组,再求子数组的最大子数组的和。

程序源代码:

package 数组1;
import java.util.Scanner;
public class Shuzu2{
    public static void main(String[] args){
            Scanner scan=new Scanner(System.in);
            System.out.println("请输入数组的元素个数");
            int n=scan.nextInt();
            int[] shuzu=new int[n];
            shuzu=fuzhi(n);
            int jieguo=max(shuzu);
            System.out.println("子数组和的最大值为:"+jieguo);
        }
        
        public static int[] fuzhi(int n){
            int[] shuzu=new int[n];
            Scanner s=new Scanner(System.in);
            System.out.println("从任意一个位置输入一遍数组元素");
            for(int x=1;x<=n;){
            System.out.println("数组的第"+x+"个元素:");
            shuzu[x-1]=s.nextInt();
            x++;
            }
            return shuzu;
        }
    
    public static int max(int[] shuzu){
         int max=0;
         int[] zishuzu=new  int[shuzu.length];//长度最大的子数组
        for(int n=0;n<shuzu.length;){
            for(int m=0;m<zishuzu.length;){
                zishuzu[m]=shuzu[(m+n)%shuzu.length];
                m++;
            }
               int zimax=0;
               int l=0;
               for(int i=0;i<zishuzu.length;i++)
               {
                   l = l + zishuzu[i];
                   if(l< 0)
                        l = 0;
                   else
                   {
                       if(l > zimax)
                           zimax = l;
                   }
               }
               if(max<zimax){
                   max=zimax;
               }
         n++;
        } 
         return max;
    }
    
}
运行结果截图:

总结:修改的方法很多,需要司机思考,不能掉进老师挖的坑里。

 

 

 

posted on 2017-04-06 11:27  胡泽杰  阅读(212)  评论(0编辑  收藏  举报