新情况:
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