结对开发读文本中的二维数组求该二维数组最大子数组的和

一、设计思想

  我们的设计思路两步走,先实现重文本框里读取数组,然后再实现求最大子数组的和。

实现求最大数组的和时,我们的想法是任选二维数组两点,求该两点之间的二维数组的和,将所有可能遍历,求出最大子数组,并求出和。

二、实验代码

package com.minirisoft;
import java.util.*;
import java.io.*;
public class MaxTwoArray
{
	public static void ShowArr(int arr[][],int line1,int line2,int row1,int row2)
	 {
	     for(int i=line1;i<=row1;i++)
	     {
	         for(int j=line2;j<=row2;j++)
	         {
	        	 System.out.print(+arr[i][j]+" ");
	         }
	         System.out.println();  
	     }
	 }
	public static int GetSum(int arr[][],int n,int m,int k,int l)
	 {
	    int sum=0;
	    for(int f=n;f<=k;f++)
         {
           for(int h=m;h<=l;h++)
            {
            sum+=arr[f][h];
            }
         }
	    return sum;
	 }
	public static void main(String[] args) throws NumberFormatException, IOException
	{

        int y=0;
		int x=0;
		String line;//一行数据
		
		int row1=0;
		File file=new File("f:\\input.txt");//存放数组数据的文件
		BufferedReader in=new BufferedReader(new FileReader(file));
		int[][] arr1 = new int[5][20];//读取出的数组
		int[][] arr = new int[5][20];//读取出的数组
	    while((line=in.readLine())!=null)
	    {
	      String[]temp=line.split(",");
		  for(int i=0;i<temp.length;i++)
		   {
		     arr1[row1][i]=(int) Double.parseDouble(temp[i]);
		   }
		   row1++;		   
	    }
		 in.close();
		 x=arr1[0][0];
		 y=arr1[1][0];
	  
	    for(int i=0;i<x;i++)
		{
			for(int j=0;j<y;j++)
			{
				arr[i][j] = arr1[i+2][j];
			}
	    }
	    System.out.println("文本里的数组为");
		for(int i=0;i<x ;i++ )
		{
			for(int j=0;j<arr.length-1 ;j++ )
			{
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		int sum=0;
		int n;
		int m;
		int k;
		int l;
		Scanner sc=new Scanner(System.in);
		int line1=0;
		int line2=0;
		int row2=0;
		int row3=0;
		int max=arr[0][0];
		for(n=0;n<x;n++)
		{	
		   for(m=0;m<y;m++)
		    {
			    for(k=n;k<x;k++)
			     {
			    	for(l=m;l<y;l++)
			    	{
			    		sum=GetSum(arr,n,m,k,l); 
			    		if(sum>max)
			            {
			    			 max=sum;
			    			 line1=n;                //保存第一个数的行
			    		     line2=k;                //保存第二个数的行
			    			 row2=m;                    //保存第一个数的列
			    			 row3=l;                    //保存第二个数的列
			            }
			    	}
			     }
		      }
		 }
		System.out.println("最大子数组的为:");
		ShowArr(arr,line1,row2,line2,row3);
		System.out.println("最大子数组的和为:"+max);
	}
}

 三、实验截图

四、心得体会。

 这次合作充分体现了团队合作的伟大。因为做实验可以说处处碰壁,我们两个相互合作,探索,解决了所有问题。

首先在读入文本中二维数组时遇到很多问题,比如如何跳过逗号,读出说有数,如何读数时跳入下一行,如何读出数而不是字符。等等一系列的问题。

在求最大子数组时,用了算法,比如用实现一维数组时的那个算法等都不能实现,等等

但最后,终于经过我俩努力做出来了

五、小组成员:郭健豪,杨广鑫

 

原文地址:https://www.cnblogs.com/tianyaguying/p/4369772.html