数组从文件读取返回子数组的最大值

本文介绍了一个名为toArrayByFileReader的函数,该函数能够从文件中按行读取数据并将其录入数组,同时利用Long.parseLong(s)进行类型转换以支持大数据录入。文章详细展示了如何使用FileReader和BufferedReader进行文件读取,以及如何处理读取到的数据以找到最大子数组的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 设计思路:写一个toArrayByFileReader的函数实现从文件中按行读取数据并录入数组。为了实现数组较大数据的录入,采用了Long.parseLong(s)函数对数据进行强制类型转换,实现大数的输入。
  • 不足:但Long类型也限制64位
public class shuzhu {
    public static void main(String[] args) {
        File f1 = new File("temp.txt");
        toArrayByFileReader("temp.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 maxsum,start;//最大子数组maxsum和开始位置值maxstart
        int i;
        maxsum = array[0];
        start = array[0];
        for(i=1;i<length;i++) {  //将最大子数组和与开始位置的值分别定义变量,让开始位置值参与循环,每次循环后更新最大子数组和的值,直到循环结束
            if(start<0) {
                start = 0;  //如果start小于0,则另start等于0,然后start在自身基础上加上下一个数组元素
            }
            start+=array[i];  //start=strat+array[i];
            if(start>maxsum) {  
                maxsum = start;  //再判断start与maxsum的大小,若start大于maxsum,则maxsum的值为start,start的值不变
            }
        }
        System.out.println("最大子数组的和为:");
        System.out.println(maxsum);
        // 返回数组
        return array;
    }
}

转载于:https://www.cnblogs.com/fuheishi/p/10544292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值