- 设计思路:写一个toArrayByFileReader的函数实现从文件中按行读取数据并录入数组。为了实现数组较大数据的录入,采用了Long.parseLong(s)函数对数据进行强制类型转换,实现大数的输入。
- 不足:但Long类型也限制64位
public class shuzhu {
public static void main(String[] args) {
File f1 = new File("temp.txt");
toArrayByFileReader("temp.txt");
}
public static long[] toArrayByFileReader(String name) {
// 使用ArrayList来存储每行读取到的字符串
ArrayList<String> arrayList = new ArrayList<>();
try {
FileReader fr = new FileReader(name);
BufferedReader bf = new BufferedReader(fr);
String str;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
arrayList.add(str);
}
bf.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对ArrayList中存储的字符串进行处理
int length = arrayList.size();
long[] array = new long[length];
System.out.println("读取到的数组为:");
for (int i = 0; i < length; i++) {
String s = arrayList.get(i);
array[i] = Long.parseLong(s);
System.out.println(array[i]);
}
long maxsum,start;//最大子数组maxsum和开始位置值maxstart
int i;
maxsum = array[0];
start = array[0];
for(i=1;i<length;i++) { //将最大子数组和与开始位置的值分别定义变量,让开始位置值参与循环,每次循环后更新最大子数组和的值,直到循环结束
if(start<0) {
start = 0; //如果start小于0,则另start等于0,然后start在自身基础上加上下一个数组元素
}
start+=array[i]; //start=strat+array[i];
if(start>maxsum) {
maxsum = start; //再判断start与maxsum的大小,若start大于maxsum,则maxsum的值为start,start的值不变
}
}
System.out.println("最大子数组的和为:");
System.out.println(maxsum);
// 返回数组
return array;
}
}