二维数组

对上周的一维数组加以完善。

代码如下

 

package lainxu;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.math.BigInteger;
import java.util.List;
//import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;



public class ShowM {
    
    //static Scanner it=new Scanner(System.in);
    static List<BigInteger> nums=new ArrayList<BigInteger>();    //用于储存数组
    public static void main(String[] args) throws IOException {
        // TODO 自动生成的方法存根
        
        List<BigInteger> max=new ArrayList<BigInteger>();
        
        int maxp=-1; //储存从1开始的子组和最大值的位置
        daochu();
        if(!daoru())
        {
            System.out.print("数据导入失败");
            return;
        }
        else System.out.print("数据导入成功");
        
        //int num=0;
        //手动输入区域
        //--------------------------------------------
//        System.out.println("请输入你想要查找数组的长度:");
//        while(num<=0)    //实现用户输入数组的大小
//        {
//            if(it.hasNextInt())
//            {
//                num=it.nextInt();
//                if(num<=0)
//                {
//                    System.out.println("输入数组不能小于等于0,请重新输入");
//                }
//                
//            }
//            else
//            {
//                it.next();
//                System.out.println("输入格式错误,请重新输入");
//            }
//        }
        //--------------------------------------------
        
        
        
        max.add(new BigInteger("0"));        //添加一个max使其为0
        for(int i=1;i<=nums.size();i++)        //储存数组
        {
            //--------------------------------------------
            //手动输入区域
            //System.out.println("请输入第"+i+"个数:");
            BigInteger g_down=null;
            
//            while(g_down==null)
//            {
//                if(it.hasNextInt())
//                {
                    g_down=nums.get(i-1);
                    
                    max.add(g_down.add(max.get(i-1)));
                    //nums.add(g_down);

//                }
//                else
//                {
//                    it.next();
//                    System.out.println("输入格式错误,请重新输入");
//                }
//            }
            //--------------------------------------------
            
        }

        
        System.out.println("输入的数组是"+nums.toString());
        

        
        BigInteger minn=max.get(0);
        int minp=0;
        BigInteger remax=max.get(1);
        maxp=0;
        for(int i=1;i<max.size();i++)
        {
            List<BigInteger> max2=max.subList(0, i);
            BigInteger g_min=min(max2);
            if(max.get(i).subtract(g_min).compareTo(remax)==1)
            {
                remax=max.get(i).subtract(g_min);
                maxp=i-1;
                minp=max.indexOf(g_min);
            }
        }
            
        
        System.out.println("最大子数组和为是"+(remax.subtract(minn))+",位置为("+(minp+1)+","+(maxp+1)+")");
        
        //it.close();
    }
    public static void daochu() throws IOException
    {
        File a=new File("suzu.txt");
        FileOutputStream b = new FileOutputStream(a);
        OutputStreamWriter c=new OutputStreamWriter(b,"UTF-8");
        for(int i=0;i<10000;i++)
        {
            int g_down=(int) (Math.random()*2000000000);
            if((int) (Math.random()*2)==0)
            {
                g_down=-g_down;
            }
            if(i==0)
                c.append(g_down+"");
            else c.append(" "+g_down);
            
        }
        c.close();
        b.close();
    }

 

posted @ 2019-03-19 22:13  李胜明  阅读(207)  评论(0编辑  收藏  举报