题目:程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:数组的行数,数组的列数,每一行的元素, (用逗号分开)每一个数字都是有符号32位整数,行数和列数都是正整数。
1 import java.io.BufferedReader;
2 import java.io.File;
3 import java.io.FileInputStream;
4 import java.io.FileWriter;
5 import java.io.IOException;
6 import java.io.InputStreamReader;
7 import java.util.ArrayList;
8 import java.util.List;
9 import java.util.Scanner;
10 public class shuzu2 {
11 public static void main(String[] args)throws IOException
12 {
13 List<Integer> list=new ArrayList<>();
14 Scanner scan=new Scanner(System.in);
15 int x=1;
16 while(x!=0)
17 {
18 System.out.println("请执行操作:1、普通数组求最大子数组 2、百万数组求最大子数组 0、退出");
19 x=scan.nextInt();
20 if(x==1)
21 {
22 try {
23 File file = new File("shuzu.txt");
24 if(file.isFile() && file.exists()) {
25 InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
26 BufferedReader br = new BufferedReader(isr);
27 String lineTxt = "";
28 while ((lineTxt = br.readLine()) != null){
29 list.add(Integer.parseInt(lineTxt));
30 }
31 Object[]a=list.toArray();
32 System.out.println((int)a[1]+(int)a[3]);
33 br.close();
34 int sum=a.length;
35 int sum1=0;
36 for(int i=1;i<=sum;i++)
37 {
38 sum1=sum1+i;
39 }
40 int [] b=new int[sum1];
41 int temp1=0;
42 for(int i=0;i<sum;i++)
43 {
44 int temp=0;
45 for(int k=0;k<sum-i;k++)
46 {
47 temp=temp+(int)a[i+k];
48 b[temp1]=temp;
49 temp1++;
50 }
51 }
52 for(int i=0;i<sum1-1;i++)
53 for(int k=0;k<sum1-1-i;k++)
54 {
55 if(b[k]<b[k+1])
56 {
57 int temp2=b[k];
58 b[k]=b[k+1];
59 b[k+1]=temp2;
60 }
61 }
62 System.out.println("最大的子数组和为"+b[0]);
63 } else {
64 System.out.println("文件不存在!");
65 }
66 } catch (Exception e) {
67 System.out.println("文件读取错误!");
68 }
69 }
70 if(x==2)
71 {
72 FileWriter fw = null;
73 try {
74 //创建字符输出流
75 fw = new FileWriter("shuzu1.txt");
76 for(int i=0;i<50;i++)
77 {
78 int intval=(int)(Math.random()*-9000000+8999999);
79 fw.write(""+intval+"\r\n");
80 }
81 } catch (IOException ioe) {
82 ioe.printStackTrace();
83 } finally {
84 //使用finally块来关闭文件输出流
85 if (fw != null) {
86 fw.close();
87 }
88 }
89 try {
90 File file = new File("shuzu1.txt");
91 if(file.isFile() && file.exists()) {
92 InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
93 BufferedReader br = new BufferedReader(isr);
94 String lineTxt = "";
95 while ((lineTxt = br.readLine()) != null){
96 list.add(Integer.parseInt(lineTxt));
97 }
98 Object[]a=list.toArray();
99 System.out.println((int)a[1]+(int)a[3]);
100 br.close();
101 int sum=a.length;
102 int sum1=0;
103 for(int i=1;i<=sum;i++)
104 {
105 sum1=sum1+i;
106 }
107 int [] b=new int[sum1];
108 int temp1=0;
109 for(int i=0;i<sum;i++)
110 {
111 int temp=0;
112 for(int k=0;k<sum-i;k++)
113 {
114 temp=temp+(int)a[i+k];
115 b[temp1]=temp;
116 temp1++;
117 }
118 }
119 for(int i=0;i<sum1-1;i++)
120 for(int k=0;k<sum1-1-i;k++)
121 {
122 if(b[k]<b[k+1])
123 {
124 int temp2=b[k];
125 b[k]=b[k+1];
126 b[k+1]=temp2;
127 }
128 }
129 System.out.println("最大的子数组和为"+b[0]);
130 } else {
131 System.out.println("文件不存在!");
132 }
133 } catch (Exception e) {
134 System.out.println("文件读取错误!");
135 }
136 }
137 }
138 if(x==0)
139 {
140 System.out.println("已退出。");
141 }
142 }
143 }
只达到了50个千万级的数。

来源:https://www.cnblogs.com/kt-xb/p/10549041.html