先看看代码吧。
1 package classTestOne; 2 3 import java.io.*; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 import java.io.IOException; 8 import java.math.BigInteger; 9 import java.util.ArrayList; 10 11 public class Two { 12 public static void main(String[] args) throws IOException { 13 /* 14 * 2.文件读取,很大的树,较大的结果,参数错误,自动退出 15 */ 16 // 2文件写入 17 /**/ 18 try { 19 20 FileWriter fw = new FileWriter("one.txt"); 21 BufferedWriter bw = new BufferedWriter(fw); 22 for (int i = 0; i < 10000000; i++) { 23 int n = (int) (Math.random() * 100); 24 BigInteger big=BigInteger.valueOf(n); 25 String s = n + ""; 26 bw.write(s); 27 bw.newLine(); 28 } 29 bw.close(); 30 fw.close(); 31 } catch (FileNotFoundException e) { 32 // TODO Auto-generated catch block 33 e.printStackTrace(); 34 } 35 // 2文件读取 36 37 ArrayList<String> arrList = new ArrayList<>(); 38 try { 39 FileReader fr = new FileReader("one.txt"); 40 BufferedReader bf = new BufferedReader(fr); 41 String st; 42 while ((st = bf.readLine()) != null) { 43 arrList.add(st); 44 } 45 bf.close(); 46 fr.close(); 47 } catch (FileNotFoundException e) { 48 // TODO Auto-generated catch block 49 e.printStackTrace(); 50 } 51 // 长度 52 int len = arrList.size(); 53 int a[] = new int[len]; 54 for (int i = 0; i < len; i++) { 55 // 数组转移 56 String s = arrList.get(i); 57 System.out.println(s); 58 a[i] = Integer.parseInt(s); 59 } 60 61 System.out.println(large(a, len)); // 打印最大子数组 62 63 } 64 65 private static int max(int a, int b) { 66 if (a > b) 67 return a; 68 else 69 return b; 70 } 71 72 private static int large(int a[], int n) { 73 int max = a[0]; 74 int max2 = 0; 75 for (int i = 0; i < n; i++) { 76 max2 = max(max2 + a[i], a[0]); // 几个连续最大的值 77 max = max(max, max2); // 目前为止最大值 78 } 79 return max; 80 } 81 }
根据需求,数组够长,元素够大(还在改进中)。
首先,生成一个足够长的数组,用到随机生成函数,在进行多次循环在n组够大的情况下。
读入文件,再从文件读出,根据上次写的代码将这些数进行求和计算比较求得最大子数组。
这是一千万数组的结果;
预估结果还在正确范围。