设计思想:这只是再上一个题目上做了一些改进,主要的不同点在于不知道循环数组的起点,所以我就创建一个最大长度的子数组,从任意一个数开始一次赋值给子数组,再求子数组的最大子数组的和。
程序源代码:
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; } }
运行结果截图:
总结:修改的方法很多,需要司机思考,不能掉进老师挖的坑里。