第三周个人作业--数组从文件读取返回子数组的最大值

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)函数对数据进行强制类型转换实现数组较大数据的录入。

不足之处:还是没有办法不限制数据大小多少,一样会报错,除非遇到问题就提示无法完成。

posted @ 2019-03-17 21:22  zhoulonghai  阅读(155)  评论(0编辑  收藏  举报