• 关于返回一个整数数组中最大子数组的和的问题(详细版)


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

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

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

             用Flie类+BufferedReader读取文件。

         将读入的字符串转换为大数(BigInteger类),运用已有的函数进行计算。

         

    package test3;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Random;
    import java.util.Scanner;
    
    public class The_second_test {
    
        public static void main(String[] args) throws IOException {
            /**
             * 数据定义
             */
            double a[] = new double[50000000];
            double b[] = new double[50000000]; // 用于储存子数组的最大值
            
            /**
             * 文本数据写入
             */
            FileWriter fs = new FileWriter("D:\test.txt");
            try {
                Random random = new Random(System.currentTimeMillis());
                for(int i=0;i<30000000;i++) {
                    int as = random.nextInt(1000)+1;
                    fs.write(as+" ");
                }
                
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally {
                if(fs!=null)
                fs.close();
            }
            
            /**
             * 文本数据导入
             */
            try (Scanner scanner = new Scanner(new BufferedReader(new FileReader(
                    "D:\test.txt")));) {
                int n=0;
                scanner.useDelimiter("[?|,|。|' ']");
                while (scanner.hasNext()) {
                    double s = Double.parseDouble(scanner.next());
                    a[n]=s;
                    n++;
                    System.out.println(s);
                    if(n>=200000000) {
                        System.out.println("数据量过大!请重新设置一个小200000个的数组");
                        System.exit(0);
                    }
                }
            } catch (FileNotFoundException e) {
                System.out.println("文件打开失败");
                e.printStackTrace();
                System.exit(0);
            }
            
            
            b[0] = a[0];
            /**
             * 统计所有以一开头的子数组
             */
            for (int i = 1; i < a.length; i++) {
                b[i] = b[i - 1] + a[i];
            }
            double max = b[0];
            int mas, mis;
            mas = mis = 0;
            double min = b[0];
            /**
             * 比较这些子数组里的最大值和最小值
             */
            for (int i = 1; i < b.length; i++) {
                if (max < b[i]) {
                    max = b[i];
                    mas = i;
                }
                if (min > b[i]) {
                    min = b[i];
                    mis = i;
                }
            }
            /**
             * 判断最小子数组的成员个数是否大于最大子数组的成员个数
             */
            if (mis > mas) {
                min = b[0];
                mis=0;
                for (int i = 0; i <= mas; i++) {
                    if (min > b[i]) {
                        min = b[i];
                        mis=i;
                    }
                }
            }
            /**
             * 判断最小子数组的和值是否小于零
             */
            if(mis!=0)
            {
                if (min <= 0)
                    System.out.println("最大子数组的值为" + (max - min));
                else
                    System.out.println("最大子数组的值为" + max);
            }else
                System.out.println("最大子数组的值为" + max);
            
        }
    }

    用try-catch语句来检测文件中的异常字符。

  • 相关阅读:
    c# .net 均适用根据经纬度坐标获得省市区县行政区划城市名称
    .NET LoongArch64 正式合并进入.NET
    Microk8s 安装 与使用指南
    Dapr 不是服务网格,只是我长的和他很像
    从同步函数 helloworlddotnet 开始探索OpenFunction
    CoreWCF 1.0.0 发布,微软正式支持WCF
    Microsoft Graph 的 .NET 6 之旅
    .NET MAUI RC2 发布,支持 Tizen 平台
    [LeetCode] 1296. Divide Array in Sets of K Consecutive Numbers 划分数组为连续数字的集合
    [LeetCode] 1297. Maximum Number of Occurrences of a Substring 子串的最大出现次数
  • 原文地址:https://www.cnblogs.com/adret/p/10567885.html
Copyright © 2020-2023  润新知