求数组子数组最大和续集

要求:

数组从文件读取。
如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

package test1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.Scanner;

public class test2 {
    public static void main(String[]args) throws IOException
    {
        Scanner in = new Scanner(System.in);
        String fileName = "D:\University\Sophomore Shang\专业\JAVA项目\test1\src\test1\target.txt";
        File file = new File(fileName);
        System.out.println("文件字节大小是::"+file.length());
        if(!file.exists()){
            System.out.println("文件不存在!");
        }else if(file.exists() && file.length() == 0) {
            System.out.println("文件为空!");
        }else{
            FileReader fileReader = new FileReader(fileName);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            int i,j,flag=0;
            BigInteger tmp = new BigInteger("0");
            BigInteger max = new BigInteger("0");
            while((line=bufferedReader.readLine())!=null) {
                String []s = line.split(",");
                for(i=0;i<s.length;i++)
                {
                    String k=s[i];
                    for(j=0;j<k.length();j++)
                    {
                        if(!(k.charAt(j)>='0'&&(k.charAt(j)<='9')||k.charAt(j)=='-'||k.charAt(j)==',')){
                            System.out.println("文件输入不合法,必须全部由数字组成,且中间分割用逗号!");
                            flag=1;
                            break;
                        }
                    }
                    BigInteger key = new BigInteger(k);
                    /*if(k.charAt(i)=='-') 
                       {
                          s[i];
                          continue;
                       }*/
                    
                    BigInteger cmp=new BigInteger("0");
                    if(key.subtract(cmp).intValue()>0)
                        tmp = tmp.add(key);
                    else 
                        tmp = key;  
                    if(tmp.subtract(max).intValue()>0)
                        max=tmp;
                    if(flag==1)
                        break;
                }
                if(flag==1)
                    break;
            }
            if(flag==0)
                System.out.println("子数组最大值为:"+max);
            bufferedReader.close();
            fileReader.close();
        }
    }
}
View Code

ps:

1.如果File表示一个具体文件,则length方法返回这个文件的字节大小;

2.如果File表示一个目录,则length方法的返回值不确定;

3.如果File表示的目录或文件不存在,则length方法的返回值为0L

注:还有一些bug,负数无法识别,尚未更改,但可以采取每行读取的方式,再存放到数组中,但尚未完善。

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
原文地址:https://www.cnblogs.com/xp-thebest/p/12380923.html