zoukankan      html  css  js  c++  java
  • 一个整形数组中最大值求和问题(2)

    新情况:

    1.要求数组从文件读取。

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

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

    这次的题目是在上周的课程内容之上进行改进的,需要考虑三方面的问题,但由于现在的个人能力有限,还未解决第三种问题,还需继续历练自己。下面是自己的思路讲解。

    首先解决的是第二个问题,在自己上周的程序代码上进行了改动,将int类型,换成了long型,由于从前的知识了解到,在java中float型和double型虽然能够容纳的字符长度更长,但是会有精度流失的问题,自己选取了long型来进行本次的个人测试部分。对呀抛出的两个异常都进行很好的解决。然后解决从文件读入以及输出的问题,通过网上查阅资料解决了,数组从文件读入进行计算的问题。

    但是仍有不足,自己生成随机数输出到数组,然后进行读入的问题把并没有很好的解决,在下周上课之前要借阅其他同学的代码进行学习,来完善自己的测试。

    测试截图:

      

    下面是完整代码(其中计算部分用的是上周时间复杂度为O(n)的代码):

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.Random;
     
    public class sum03 {
        
        public static void readFileByLines(String fileName) {
            File file = new File(fileName);
            BufferedReader reader = null;
            try {
                System.out.println("以行为单位读取文件内容,一次读一行");
                reader = new BufferedReader(new FileReader(file));
                String tempString = null;
               
                while ((tempString = reader.readLine()) != null) {
    
                    System.out.println(tempString);
                    
                }
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e1) {
                    }
                }
            }
        }
        
        public static long[] toArrayByFileReader1(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];
            for (int i = 0; i < length; i++) {
                String s = arrayList.get(i);
                array[i] = Long.parseLong(s);
            }
            
            long f=0;//定义整形变量f,为子数组最大值
            long sum=0;//定义整形变量sum,为子数组求和
            for(int i=0;i<length;i++)
            {
                sum = sum+array[i];
                if(sum < 0)
                {
                    sum=0;
                }
                if(sum > f)
                {
                    f = sum;
                }
            }
            
            if(sum == 0)
            {
                for(int i=0;i<length;i++)
                {
                    if(i == 0)
                    {
                        f = array[i];
                    }
                    if(f < array[i])
                    {
                        f = array[i];
                    }
                }
            }
            
            System.out.println("该数组的子数组之和的最大值为:"+f);
            
            
            // 返回数组
            return array;
        }
    
        
        public static void main(String[] args) throws IOException{
           
            String name = new String("D:\JAVA\java-1\sum03.txt");
            
            readFileByLines(name);
            toArrayByFileReader1(name);//文件路径
           
        }
    }
  • 相关阅读:
    拓端tecdat|R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
    拓端tecdat|R语言资产配置策略量化模型:改进的移动平均线策略动态回测
    拓端tecdat|R语言量化:合成波动率指数移动平均策略分析标准普尔500波动率指数(VIX)
    拓端tecdat|Python中的多项式回归拟合非线性关系实例
    从集团管控到集团赋能
    性能之巅-优化你的程序
    3个小时,从学到做,我用低代码平台搭了一套管理系统
    Hadoop架构原理
    硬核操作系统讲解
    一文弄懂什么是DevOps
  • 原文地址:https://www.cnblogs.com/Qi77/p/10554436.html
Copyright © 2011-2022 走看看