zoukankan      html  css  js  c++  java
  • 关于返回一个整数数组中最大子数组的和的问题(续01)

    新要求:

      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);
            }
            
            
            
        }    
    }
  • 相关阅读:
    JWPlayer Uncaught Error: Invalid SRT file
    京东电商API
    map, string 强大的STL
    VFL演示样例
    sizeof小览
    Java中httpClient中三种超时设置
    Windows下Mysql5.6启用监控执行脚本的日志
    实时监控MySql状态
    实时监控mysql数据库变化
    SVN命令使用详解
  • 原文地址:https://www.cnblogs.com/leity/p/10545983.html
Copyright © 2011-2022 走看看