关于返回一个整数数组中最大子数组的和的问题(续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); } } }