求二维数组的子数组和的最大值,首先创建一个二维数组,考虑到输入数值是的简便,我自定义二维函数的行和列,用随机函数随机产生一个二维数组。首先第一二层循环求出第一行数组所有从第一个值开始的子数组的和,如果和为负数,则令和等于零再加下一个数,以此方法求出最大值;在外层循环中有参数n使数组前n行数组再求出所有从第一列开始的子数组的和,如果和为负数,则令和等于零再加下一个数,以此方法求出最大值。然后第三层循环求出后边所有行数组所有从第一个值开始的和的最大值。第四层循环是从第一行开始求出所有行的子数组和的最大值。代码如下:
package 数组4; import java.util.Random; import java.util.Scanner; public class shuzu4 { public static void main(String[] args) { int a[][]; int i,j,l,h,n,k,sum,max; //随机产生一个数组 Scanner scanner = new Scanner(System.in); System.out.print("输出随机产生的数组的长度:"); h=scanner.nextInt(); System.out.print("输出随机产生的数组的高度:"); l=scanner.nextInt(); scanner.close(); a=new int[l][h]; for(i=0;i<l;i++) { for(j=0;j<h;j++) { Random random = new Random(); a[i][j]=random.nextInt(11); a[i][j]=a[i][j]-1; System.out.print(a[i][j]); System.out.print(" "); } System.out.println(""); } max=0; for(n=0;n<l;n++) { sum=0; for(i=0;i<l-n;i++) { sum=0; for(j=0;j<h;j++) { for(k=i;k<=i+n;k++) { sum=sum+a[k][j]; } System.out.print(sum); System.out.print(" "); if(sum<0) { sum=0; } if(max<sum) { max=sum; } } } } System.out.print(max); System.out.println(""); } }