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