码迷,mamicode.com
首页 > 编程语言 > 详细

环状数组求最大子数组

时间:2020-02-28 15:40:30      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:reader   throws   value   sys   特定   防止   shu   div   异常   

思路就是在非环状的基础上,将数组扩大两倍,然后利用原来的方法进行寻找。

本程序代码是从文件中读取数字,然后进行寻找。

下面这段代码是文件读取的代码,其中加了一个自定义的异常处理,增强文件的健壮性。

package diyizhou;  
  
import java.io.File;  
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.FileInputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;



import java.io.FileWriter;  
  



class MyException extends Exception
{
    public MyException(String Message) {
        super(Message);
    }
    public MyException(String message, Throwable cause) {
        super(message, cause);
    }
     public MyException( Throwable cause) {
        super(cause);
    }

}


public class cin_txt {  
    
    
    public static void throwExceptionMethod() throws MyException
       {
          
          try {
            // System.out.println( "Method throwException" );
             // System.out.println(11111);
             throw new Exception("内容不规范");  // 产生了一个特定的异常
          }
          catch( Exception e )
          {
              //System.out.println("2222");
              System.err.println(e.getMessage());
              //throw new MyException("NotSanjiaoException2");
            
             
          }
          

          // any code here would not be reached
       }
    
    
    public static void duqu(String lujing)
    {
        int num[]=new int[10000];
        String s="";
        int i=0;
        try { // 防止文件建立或读取失败,用catch捕捉错误并打印,也可以throw  
  
            /* 读入TXT文件 */  
            String pathname = lujing; // 绝对路径或相对路径都可以,这里是绝对路径,写入文件时演示相对路径  
            File filename = new File(pathname); // 要读取以上路径的input。txt文件  
            InputStreamReader reader = new InputStreamReader(  
                    new FileInputStream(filename));
            BufferedReader br = new BufferedReader(reader);  
            String line = "";  
            line = br.readLine();  
            while (line != null) {  
                
                StringTokenizer st2 = new StringTokenizer(line, ",");
                while (st2.hasMoreElements()) {
                    s=String.valueOf(st2.nextElement());
                    try
                    {

                        num[i]=Integer.parseInt(s);
                        i++;
                    }
                    catch(Exception e)
                    {
                        try {
                            throwExceptionMethod();
                        } catch (MyException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        System.exit(0);
                    }
                    
                    
                }
               // System.out.println();
                
                //System.out.println("**********");
                //System.out.println(line);
                line = br.readLine(); // 一次读入一行数据 
            }  
  
          
  
        } catch (Exception e) {  
            e.printStackTrace();  
        }
        
       xunhuanshuzu.huan(num,i);
        
    }
 
}  

接下来是处理数字的源程序代码

 

package diyizhou;

import java.util.Scanner;

public class xunhuanshuzu {
    
    
    public static void main(String[] args) {
        cin_txt.duqu("E:\\txt.txt");
    }
    public static void huan(int[] a,int n)
    {
        for(int i=0;i<n;i++)
        {
            a[i+n]=a[i];
        }
        Jisuan(a,n);
    }
    
    public static void Jisuan(int[] a,int n)
    {
        int mmax=a[0];
        int s=-100000;
        for(int i=0;i<n;i++)
        {
            System.out.println(a[i]);
            s=-1000;
            for(int j=i;j<n+i;j++)
            {
                s+=a[j];
                if(s>mmax)
                {
                    mmax=s;
                }
                if(s<0)
                {
                    s=a[j];
                }
            }
            
        }
        System.out.println("mmax="+mmax);
    }

}

接下来附上两张运行结果

技术图片

 

 

技术图片

 

分别是正常规范的文件和不规范的文件的运行的结果图。

 

环状数组求最大子数组

标签:reader   throws   value   sys   特定   防止   shu   div   异常   

原文地址:https://www.cnblogs.com/yizhixiaozhu/p/12377263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!