关于返回一个整数数组中最大子数组的和的问题(续)

新要求:

  1、要求数组从文件读取。

  2、如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。

  3、如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

这次测试实在上一篇博客的基础上进行优化修改的(用的是上篇博客中的第三种方法)。

用Flie类+BufferedReader读取文件。

因为考虑到大数字,int类型是不能用的,这里将读入的字符串转换为大数(BigInteger类),运用已有的函数进行计算。

用try-catch语句来检测文件中的异常字符。

代码只能从文件中读取100个数字,还不知道如何灵活读取,这个缺点有待解决。

package about_bank_account;

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

public class Test {
    
    @SuppressWarnings("resource")
    public static void main (String[] args) throws IOException{
        String line = null;
        String snum[] = new String[100];
        String sp[] = null;
        File file = new File("Number.txt"); 
        BufferedReader br = new BufferedReader(new FileReader(file));
        int temp = 0;
        int k = 0;
        int i = 0;
        BigInteger big[] = new BigInteger[100];
        BigInteger bigrmax = new BigInteger("0");
        BigInteger bigmax = new BigInteger("0");
        int jianceshu = 0;
        
        
        
        //读文件    
        while((line=br.readLine())!=null) {
            sp = line.split(" ");//按空格进行分割
            for(i=0;i<sp.length;i++){                    
                snum[temp] = sp[i];
                temp++;                
            }
        }
        
        
        
        //检测文件中异常
        try { 
            for(i = 0; i<snum.length; i++) {//转化为大数
                if(snum[i] != null) {
                    big[i] = new BigInteger(snum[i]);        
                    //System.out.println(big[i]);
                }
            }
        } 
        catch(NumberFormatException e) { 
            System.out.println("文件中存在异常字符!"); 
            jianceshu = 1;            
        } 
        
        
        
        //若无异常,执行
        if(jianceshu == 0) {
            i = 0;
            while(big[i] != null) {
                k++;
                i++;
            }
            
            
            //求子数组最大值
            BigInteger b0=new BigInteger("0");
            bigrmax = big[0];
            for(i = 0; i<k; i++) {
                if((bigmax.compareTo(b0) < 0) || bigmax.equals(b0)){
                    bigmax = big[i];
                    //System.out.println("+++"+bigmax);//记录
                }else {
                    bigmax = bigmax.add(big[i]);
                    //System.out.println("///"+bigmax);//记录
                }
                if(bigrmax.compareTo(bigmax) < 0) {
                    bigrmax = bigmax;
                    //System.out.println("---"+bigrmax);//记录
                }
            }
            System.out.println("结果"+bigrmax);
        }
        
        
        
    }    
}

猜你喜欢

转载自www.cnblogs.com/leity/p/10545983.html