整数数组子数组最大和 文件导入

其实在做这个的时候一直不知道该怎么做,因为当时Java基础没打好,文件的导入导出,代码方法不会用,具体的方法也不知道,也是在网上找了代码之后,通过学习,理解了思路,自己学了一遍,才做出了

package com.company;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class test2 {

        public static int length=0;

        public static int[] readArray() {
            int[] a = new int[100];
            int t;
            String num="";
            try {
                BufferedReader br = new BufferedReader(new FileReader("E:\\input.txt"));
                while ((t = br.read()) != -1) {
                    if(t==45 && num=="") {
                        num="-";
                        continue;
                    }
                    if(t>=48 && t<=57)
                        num += (char)t;
                    if((t<48 || t>57) && num!="" && num!="-") {
                        a[length++]=Integer.parseInt(num);
                        if(t==45)
                            num="-";
                        else
                            num="";
                    }
                    //如果num为空或为负号,而且读到的是非数字,那么读下一个字符
                }
                if(!(num=="" || num=="-"))   //文件末尾无间隔符或为负号,则录入最后一个数
                    a[length++]=Integer.parseInt(num);
            /*System.out.println(length);
            for(int i=0;i<length;i++)
                System.out.println(a[i]);*/
                br.close();
            } catch (FileNotFoundException e) {
                System.out.println("文件不存在!");
            } catch (IOException e) {
                System.out.println("文件读取异常,请检查是否拥有文件读取权限!");
            } catch (NumberFormatException e) {
                long n = Long.parseLong(num);
                if(n > 2147483647)
                    System.out.println("" + length + "个数" + n + "大于整型最大值2147483647!");
                else
                    System.out.println("" + length + "个数" + n + "小于整型最小值-2147483648!");
            } catch(ArrayIndexOutOfBoundsException e) {
                System.out.println("此程序只支持100个整数内查找最大子数组的和!");
            }
            return a;
        }

        public static void findMaxArray(int[] a) {
            int[] b = new int[100];  //数块数组
            b[0] = a[0];
            int j=0,max=0,maxnum=0;
            try {
                for(int i=1;i<length;i++) {
                    if(a[i]<0 && b[j]>0)
                        b[++j] = a[i];
                    else if(a[i]>0 && b[j]<0)
                        b[++j] = a[i];
                    else if(a[i]<=0 && b[j]<0)
                        b[j] += a[i];
                    else if(a[i]>=0 && b[j]>0)
                        b[j] += a[i];
                }
                for(int i=0;i<j;i++)
                    System.out.println(b[i]);
                if(b[0]<=0 && b[1]==0) {    //所有数均小于等于0时
                    max=a[0];
                    for(int i=1;i<10;i++)
                        if(max<a[i])
                            max=a[i];
                }
                else {
                    max=b[0];
                    for(int i=0;i<=j;i++)
                        if(max<b[i]) {
                            max=b[i];
                            maxnum=i;
                        }
                    int t=0;
                    for(int i=maxnum;i<=j-2;i+=2) {    //从最大数块所在位置向右运算
                        t=t+b[i+1]+b[i+2];         //最大数块右方的数块和,如果存在大于0的,则可以加入最大子数组和的运算
                        if(t>0) {
                            max+=t;
                            t=0;
                        }
                    }
                    t=0;
                    for(int i=maxnum;i>=2;i-=2) {    //从最大数块所在位置向左运算
                        t=t+b[i-1]+b[i-2];         //最大数块左方的数块和,如果存在大于0的,则可以加入最大子数组和的运算
                        if(t>0) {
                            max+=t;
                            t=0;
                        }
                    }
                }
            }catch(NumberFormatException e) {
                System.out.println("运算过程中出现超出整型运算范围的整数!");
            }
            System.out.println("最大子数组的和为:" + max);
        }
        public static void main(String[] args) {
            findMaxArray(readArray());
        }
    }

 

posted @ 2022-03-20 21:17  橙大力  阅读(47)  评论(0)    收藏  举报