返回一个整数数组中最大子数组的和(续)
新情况:
1、要求数组从文件读取。
2、如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
3、另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
一、源代码
import java.io.*; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; public class MaxList { public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("1.txt"))); List<BigInteger> list = new ArrayList<>(); String temp; BigInteger max = BigInteger.valueOf(Integer.MIN_VALUE); while ((temp = bufferedReader.readLine()) != null) { try { BigInteger x = BigInteger.valueOf(Long.parseLong(temp)); System.out.println(x); list.add(x); }catch (NumberFormatException e){ System.err.println("存在非法字符,退出程序!"); return; } } bufferedReader.close(); BigInteger sum = list.get(0),zero = BigInteger.valueOf(0); System.out.println("-------------"); for (int i = 1;i < list.size();i++){ if (sum.compareTo(zero) == -1){ sum = list.get(i); }else { sum = sum.add(list.get(i)); } if (sum.compareTo(max) == 1){ max = sum; } } System.out.println("结果为:"+max); } }
二、截图
当有非法字符“a”时自动退出程序。
无错误时正常显示信息。
三、思路
使用工具类---BigInteger来替代之前的int。