首页 > 编程语言 > 详细

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

时间:2020-02-26 18:13:15      阅读:58      评论:0      收藏:0      [点我收藏+]

新情况:

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

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

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

 

源代码

 1 package HomeTest;
 2 
 3 import java.io.*;
 4 import java.math.BigInteger;
 5 import java.util.ArrayList;
 6 import java.util.List;
 7 
 8 public class MaxList {
 9     public static void main(String[] args) throws IOException {
10         BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("F:\\JAVA\\testdemo\\homeTest\\src\\1.txt")));
11         List<BigInteger> list = new ArrayList<>();
12         String temp;
13         BigInteger max = BigInteger.valueOf(Integer.MIN_VALUE);
14         while ((temp = bufferedReader.readLine()) != null) {
15             try {
16                 BigInteger x = BigInteger.valueOf(Long.parseLong(temp));
17                 System.out.println(x);
18                 list.add(x);
19             } catch (NumberFormatException e) {
20                 System.err.println("存在非法字符!");
21                 return;
22             }
23         }
24         bufferedReader.close();
25         BigInteger sum = list.get(0), zero = BigInteger.valueOf(0);
26         System.out.println();
27         for (int i = 1; i < list.size(); i++) {
28             if (sum.compareTo(zero) == -1) {
29                 sum = list.get(i);
30             } else {
31                 sum = sum.add(list.get(i));
32             }
33             if (sum.compareTo(max) == 1) {
34                 max = sum;
35             }
36         }
37         System.out.println("最大子数组和为:" + max);
38     }
39 }

 

结果截图

技术分享图片

 

 

当存在非法字符时

技术分享图片

 

技术分享图片

 

 

 思路

大体功能与前一个相同,主要是添加文件读取以及用BigInteger来代替int

 

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

原文:https://www.cnblogs.com/best-hym/p/12367763.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!