实验要求:
要求数组从文件读取
如果输入的数组很大,并且有很多大的数字,就会产生比较大的结果(考虑一下数的溢出),请保证你的程序能正常输出。
另外,如果输入文件的参数有错误,这个程序应该能正常退出,并显示相应的错误信息。任何输入错误都不能导致你的程序崩溃。
设计思路:
在之前的程序的基础上,增加一段文件导入的代码,形成现在的代码,
package sum; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Scanner; public class sum { static double GetMaxAddOfArray(double[] arr, int sz) { if (arr == null || sz < 1) return 0; double MAX = arr[0]; double sum = arr[0]; for (int i = 1; i < sz; i++) { if (sum < 0) sum = arr[i]; else { sum += arr[i]; } if (sum > MAX) MAX = sum; } return MAX; } public static void main(String[] args) { /* Scanner input=new Scanner(System.in); int n; System.out.println("输入数组个数:"); n=input.nextInt(); int i; int arr[]=new int[n]; for(i=0;i<n;i++) { arr[i]=input.nextInt(); }*/ double arr[] = new double[100000]; try (Scanner scanner = new Scanner(new BufferedReader(new FileReader( "F:\新建文件夹\Sum\新建文本文档.txt")));) { int n=0; while (scanner.hasNext()) { double s = Double.parseDouble(scanner.next()); arr[n]=s; n++; System.out.println(s); } } catch (FileNotFoundException e) { e.printStackTrace(); } int m=arr.length; System.out.println("最大子数组的和:"); System.out.println(GetMaxAddOfArray(arr,m)); } }
但是目前代码存在一些问题:就是内存的溢出,当数据量过大时,程序就会报错;目前还没有找到解决的方法;仍需改进。