1、题目要求:(1)要求数组从文件读取。
(2)如果输入的数组很大,并且有很多大的数字,就会产生比较大的结果(考虑一下数的溢出),请保证你的程序能正常输出。
(3)另外,如果输入的文件参数有错误,这个程序应该能正常退出,并显示相应的错误信息。任何输入错误都不能导致你的程序崩溃。
2、设计思路:(1)文件存取
(2)根据数据量分类处理:①数据量10万以下,就全部读取,然后计算。②数据量十万以上,就每次读取十万数据,依次处理,最后汇总得出最大值。
(3)函数分模块实现功能,增强程序的耦合性。
3.源程序代码
package main; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class test { public static void main(String[] args) throws Exception { File file = new File("src/test.txt"); if(txtlength(file, " ")<100000) { int[] a = getLineFromTxt(file, " "); System.out.println(mathmatic(a)); } else { } } public static int[] getLineFromTxt(File file, String split) throws Exception { BufferedReader br = new BufferedReader(new FileReader(file)); String firstLine = br.readLine(); // 就读第一行哦 String[] arrs = firstLine.split(" "); int[] arr = new int[arrs.length]; for (int i = 0; i < arr.length; i++) { arr[i] = Integer.parseInt(arrs[i]); } if (br != null) { br.close(); br = null; } return arr; } public static int[] getLineFromTxt2(File file, String split, int d) throws Exception { BufferedReader br = new BufferedReader(new FileReader(file)); String firstLine = br.readLine(); // 就读第一行哦 String[] arrs = firstLine.split(" "); int[] arr = new int[arrs.length]; for (int i = d; i < d+100000; i++) { arr[i] = Integer.parseInt(arrs[i]); } if (br != null) { br.close(); br = null; } return arr; } public static int txtlength(File file, String split) throws Exception { BufferedReader br = new BufferedReader(new FileReader(file)); String firstLine = br.readLine(); // 就读第一行哦 String[] arrs = firstLine.split(" "); return arrs.length; } public static int mathmatic(int[] a) { int[] b = new int[a.length]; int[] c = new int[a.length]; // 生成整型数组 for (int j = 0; j < c.length; j++) { int sum = 0; for (int i = j; i < a.length; i++) {// 生成各个子数组 sum = (int) (a[i] + sum); // (连续的一个和多个整数组成) b[i] = sum; // 求出各个子数组的和 } int max = b[0]; // 比较各个子数组的和的大小 for (int i = j; i < b.length; i++) { if (max < b[i]) max = b[i]; } c[j] = max; } int max = c[0]; for (int i = 0; i < c.length; i++) {// 输出最大子数组的和 if (max < c[i]) max = c[i]; } return max; } }
4、个人反思
这个程序的关于数据很大,处理大数据功能未实现,不过我体会到一种分块处理数据的思想