个人作业2,

实验要求:

要求数组从文件读取

如果输入的数组很大,并且有很多大的数字,就会产生比较大的结果(考虑一下数的溢出),请保证你的程序能正常输出。

另外,如果输入文件的参数有错误,这个程序应该能正常退出,并显示相应的错误信息。任何输入错误都不能导致你的程序崩溃。

设计思路:

在之前的程序的基础上,增加一段文件导入的代码,形成现在的代码,

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));
        }
}

但是目前代码存在一些问题:就是内存的溢出,当数据量过大时,程序就会报错;目前还没有找到解决的方法;仍需改进。

 

posted @ 2019-03-18 21:24  K_Y  阅读(130)  评论(0编辑  收藏  举报