• 返回一个整数数组中最大子数组的和


     

    设计思路

    ·判断如果子数组变大,即加入输入,和是会变小还是变大

    ·遍历数据及环形数据

    ·文件读写

    ·try-catch进行异常捕获

    ·数据溢出使用BigInteger(参考https://www.cnblogs.com/20183544-wangzhengshuai/p/12365976.html

    原码

    package Array;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.math.BigInteger;
    
    public class CircleArray {
        @SuppressWarnings("resource") // 这个用来消除警告
        public static void main(String[] args) throws IOException {
            String line = "";
            String snum[] = new String[100];
            String sp[] = new String[10];// 设置num.txt中一行10个数据
            File file = new File("subarray.txt"); // subarray.txt 就在此java工程下
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader(file));
            } catch (FileNotFoundException e) {
                System.out.println("文件subarray.txt没有在此java工程下,请设置好文件位置后再次尝试");
                return;
            }
           
            int temp = 0;
            int k = 0;
            int i = 0;
            BigInteger big[] = new BigInteger[100];
            BigInteger big2[] = new BigInteger[100];
            BigInteger bigmax = new BigInteger("-9999999999");
            BigInteger bigmax2 = new BigInteger("0");
            BigInteger bigmin = new BigInteger("9999999999");
            BigInteger bigsum = new BigInteger("0");
            // 使用BigInteger读文件按行读取文件
            while ((line = br.readLine()) != null) {
                sp = line.split(" ");// 按空格进行分割函数
                for (i = 0; i < sp.length; i++) {
                    snum[temp] = sp[i];
                    temp++;
                }
            }
    
            // 数据转换
            try {
                for (i = 0; i < snum.length; i++) {// 转化为BigInteger
                    if (snum[i] != null) {
                        big[i] = new BigInteger(snum[i]);
                        big2[i] = big[i];
                        bigsum = bigsum.add(big[i]);
                    }
                }
            } catch (NumberFormatException e) { // 数据转换时的异常处理完成要求3
                System.out.println("文件中存在异常字符,请更新后再次尝试!");
                return;
            }
            i = 0;
            // 求出文件中的数据的个数k,在后面加以判断文件夹是否为空
            while (big[i] != null) {
                k++;
                i++;
            }
            // 求子数组最大值
            BigInteger b0 = new BigInteger("0");
            for (i = 1; i < k; i++) {
                if (big[i-1].compareTo(b0) > 0) {
                    big[i] = big[i].add(big[i-1]);
                }
            }
            for (i = 0; i < k; i++) {
                if (big[i].compareTo(bigmax) > 0) {
                    bigmax = big[i];
                }
            }
            if(k==0) {
                System.out.println("文件夹为空");
            }else {
            System.out.println("所有子数组的和的最大值为" + bigmax);
            }
            // 环形数组求子数组最小值
            for (i = 1; i < k; i++) {
                if (big2[i-1].compareTo(b0) < 0) {
                    big2[i] = big2[i].add(big2[i-1]);
                }
            }
            for (i = 0; i < k; i++) {
                if (big2[i].compareTo(bigmin) < 0) {
                    bigmin = big2[i];
                }
            }
            bigmax = bigsum.subtract(bigmin);
            if(k==0) {
                System.out.println("文件夹为空");
            }else {
            if(bigmax.compareTo(bigmax2) > 0) {
                System.out.println("环形数组的所有子数组的和的最大值为" + bigmax);
            }else {
                System.out.println("环形数组的所有子数组的和的最大值为" + bigmax2);
            }
            }
        }
        
    }
    CircleArray.java

    运行结果

    当文件夹为空

     当文件夹中含有字母

     当数据为

    结果显示

  • 相关阅读:
    什么是蓝绿部署和滚动部署
    北漂--我的2018
    辛苦俩月总结的面试题,掌握它怼翻面试官不是梦~
    记一次项目谈判的失败经历,要拒绝免费开发!
    程序员技术入股的那些坑
    记一次程序员在办公室里的“撕逼”经历
    公司来了个“奇葩”的程序员
    苦逼程序员如何在公司生存的经验分享
    (第二部)程序员逆天改命之胜天半子
    别闹了,颠覆世界不是为了让它变得更糟
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12374350.html
Copyright © 2020-2023  润新知