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


    一、设计思想

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

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

    二、实验代码

    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);
    	}
    }
    

     三、实验截图

    四、心得体会。

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

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

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

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

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

     

  • 相关阅读:
    WPF之长短
    MFC程序和Win32程序的关系
    .NET Framework/CLR之长短
    常用软件
    经典推荐.Net面试法宝
    socket编程原理
    常用开发工具
    Get和Post方法的区别
    MAC IP等相关
    Datagrid为什么不自动换行显
  • 原文地址:https://www.cnblogs.com/tianyaguying/p/4369772.html
Copyright © 2020-2023  润新知