首页 > 编程语言 > 详细

从文件中读取求数组的子数组的最大值

时间:2019-03-16 20:44:13      阅读:158      评论:0      收藏:0      [点我收藏+]

  这周的测试是在原来的基础上,运用了文件储存的形式,添加了一些问题,从文件中读取以及在运算中的过程中,出现超除了整数的范围情况的处理,这些刚开始的时候我写出了文件的存储,但是对于超出范围的情况,一开始还没有头绪,但是经过了一些同学的指导,以及百度了一些知识。但是在实现的时候,还是出现了一些问题,实现了对于以规模的数据存储,之后有时显得大数据的计算。源代码如下:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class zdh{
    public static void main(String[] args) throws IOException 
    {
          findmax();
}
        public static findmax(){

        Scanner in= new Scanner(System.in);
        //writeFile();
        int hang=gethang();
        int[] num=getnum(hang);
        long[] num2=new long [hang];
        long max=0;
        int s;
        boolean f=false;
        for(s=0;s<num.length;s++) {
            if(num[s]==0)break;
            if(num[s]>0)f=true;
        }
        if(f==true) {
        max=num[0];
        num2[0]=num[0];
        for(int i=1;i<s;i++) {
            num2[i]=num2[i-1]+num[i];
            if(num2[i]>num2[i-1])max=num2[i];
        }
        for(int i=0,j=0;j<s;) {            
            num2[i]=num2[i]-num[j];
            if(num2[i]>max)max=num2[i];
            if(i==s-1) {j++;i=j;}
            else i++;
        }
        }
        else {
            max=num[0];
            num2[0]=num[0];
            for(int i=1;i<s;i++) {
                num2[i]=num2[i-1]+num[i];
                if(num2[i]>max)max=num2[i];
            }
        }
        System.out.println(max);
        in.close();
    }
    public static int gethang() {
        int i=0;
        try (FileReader reader = new FileReader("text.txt"); 
                BufferedReader br = new BufferedReader(reader)) 
            { 
            String line;  
            while ((line = br.readLine()) != null) {
                i++;
             }
            } 
            catch (IOException e)
            { 
                e.printStackTrace(); 
            }
            return i;
    }
    public static int[] getnum(int lang) throws IOException {
        int [] in=new int[lang];
        int i=0;
        try (FileReader reader = new FileReader("text.txt"); 
                BufferedReader br = new BufferedReader(reader)) 
            { 
            String line;  
            while ((line = br.readLine()) != null) {
                 in[i]= Integer.parseInt(line);
                i++;
             }
            } 
            catch (IOException e)
            { 
                e.printStackTrace(); 
            }
            return in;
    }
    
        public  void writeFile() {
            int i=0;
            int fu=0;
            try {
                File writeName = new File("text.txt");
                writeName.createNewFile();
                try (FileWriter writer = new FileWriter(writeName);
                     BufferedWriter out = new BufferedWriter(writer)
                ) {
                    for(int j=0;j<150;j++) {
                        i=1+(int)(Math.random()*9);
                        fu=1+(int)(Math.random()*2);
                        if(fu==1)i=0-i;
                    out.write(i+"\r\n"); // \r\n换行
                    out.flush(); 
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}    

 

从文件中读取求数组的子数组的最大值

原文:https://www.cnblogs.com/Evak/p/10544096.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!