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

返回一个整数数组中最大子数组的和(2)

时间:2020-02-27 01:06:51      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:null   exception   图片   ring   test   很多   遇到   print   sys   

题目要求:

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

    思路和代码:

    可以看到,提出了新的要求,其中很明显的是数字溢出问题,和异常捕捉。对于数字溢出,我们可以使用BigInteger类,而异常捕捉直接try catch代码块即可。下面是代码和测试:
public static void main(String[] args) throws IOException {
    BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("F:\\WorkSpace\\Test\\src\\Teste\\1.txt")));
    List<BigInteger> a = new  ArrayList<>();
    String file;
    BigInteger max_ending_here,max_so_for;
    max_ending_here = max_so_for = BigInteger.valueOf(Integer.MIN_VALUE);
    while((file=bufferedReader.readLine())!=null) {
        try {
            BigInteger x = BigInteger.valueOf(Long.parseLong(file));
            System.out.println(x);
            a.add(x);
        } catch (Exception e) {
            System.err.println("存在非法字符 程序将退出!");
            return;
        }
    }
    bufferedReader.close();
    for(BigInteger x:a) {
        max_ending_here = x.max(max_ending_here.add(x));
        max_so_for =max_so_for.max(max_ending_here);
    }
    System.out.println("-----------");
    System.out.println(max_so_for);
    
}
测试截图:有非法字符a:

技术图片

测试截图:无非法字符:

技术图片

总结:在遇到超过整数的上线的时候,可以使用java的BigInteger类进行转换和使用。关于算法其实还是上一篇的算法。

返回一个整数数组中最大子数组的和(2)

标签:null   exception   图片   ring   test   很多   遇到   print   sys   

原文地址:https://www.cnblogs.com/wushenjiang/p/12369857.html

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