package zuoye_02; import java.util.ArrayList; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class shuzu2{ public static void main(String[] args) { File f1 = new File("D:\JAVA-workplace\zuoye_02\shuzu_02.txt"); toArrayByFileReader("D:\JAVA-workplace\zuoye_02\shuzu_02.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 max,chu;//最大子数组max和开始位置值chu int i; max = array[0]; chu = array[0]; for(i=1;i<length;i++) { //将最大子数组和与开始位置的值分别定义变量,让开始位置值参与循环,每次循环后更新最大子数组和的值,直到循环结束 if(chu<0) { chu = 0; //如果chu小于0,则另start等于0,然后chu在自身基础上加上下一个数组元素 } chu+=array[i]; //chu=chu+array[i]; if(chu>max) { max = chu; //再判断chu与max的大小,若chu大于max,则max的值为chu,chu的值不变 } } System.out.println("最大子数组的和为:"); System.out.println(max); return array; } }
设计思路:先用一个toArrayByFileReader的函数实现从文件中按行读取数据并录入数据到数组中。
然后将数组进行比较,求最大子数组。
采用了Long.parseLong(s)函数对数据进行强制类型转换实现数组较大数据的录入。
不足之处:还是没有办法不限制数据大小多少,一样会报错,除非遇到问题就提示无法完成。