软件工程-个人作业2

1、题目要求:(1)要求数组从文件读取。

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

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

2、设计思路:(1)文件存取

                        (2)根据数据量分类处理:①数据量10万以下,就全部读取,然后计算。②数据量十万以上,就每次读取十万数据,依次处理,最后汇总得出最大值。

                       (3)函数分模块实现功能,增强程序的耦合性。

3.源程序代码

package main;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class test {
    public static void main(String[] args) throws Exception {
        File file = new File("src/test.txt");
        if(txtlength(file, " ")<100000) {
            int[] a = getLineFromTxt(file, " ");
            System.out.println(mathmatic(a));
        }
        else {
            
        }
    }


    public static int[] getLineFromTxt(File file, String split) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String firstLine = br.readLine(); // 就读第一行哦
        String[] arrs = firstLine.split(" ");
        int[] arr = new int[arrs.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = Integer.parseInt(arrs[i]);
        }
        if (br != null) {
            br.close();
            br = null;
        }
        return arr;
    }
    public static int[] getLineFromTxt2(File file, String split, int d) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String firstLine = br.readLine(); // 就读第一行哦
        String[] arrs = firstLine.split(" ");
        int[] arr = new int[arrs.length];
        for (int i = d; i < d+100000; i++) {
            arr[i] = Integer.parseInt(arrs[i]);
        }
        if (br != null) {
            br.close();
            br = null;
        }
        return arr;
    }

    public static int txtlength(File file, String split) throws Exception {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String firstLine = br.readLine(); // 就读第一行哦
        String[] arrs = firstLine.split(" ");
        return arrs.length;
    }

    public static int mathmatic(int[] a) {

        int[] b = new int[a.length];
        int[] c = new int[a.length];
//            生成整型数组

        for (int j = 0; j < c.length; j++) {
            int sum = 0;
            for (int i = j; i < a.length; i++) {// 生成各个子数组
                sum = (int) (a[i] + sum); // (连续的一个和多个整数组成)
                b[i] = sum; // 求出各个子数组的和
            }
            int max = b[0]; // 比较各个子数组的和的大小
            for (int i = j; i < b.length; i++) {
                if (max < b[i])
                    max = b[i];
            }
            c[j] = max;
        }
        int max = c[0];
        for (int i = 0; i < c.length; i++) {// 输出最大子数组的和
            if (max < c[i])
                max = c[i];
        }
        return max;
    }
}

4、个人反思

 这个程序的关于数据很大,处理大数据功能未实现,不过我体会到一种分块处理数据的思想

原文地址:https://www.cnblogs.com/quxiangjia/p/10548468.html