- 设计思路:写一个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; } }