package geren02; import java.util.Scanner; import java.io .File; import java.io .FileReader; import java.io .FileWriter; import java.io .PrintWriter; import java.util.ArrayList; import java.util.InputMismatchException; public class Wenjian { public static void main(String[] args) { long start = System.currentTimeMillis(); int LENGTH=100000000;//数量 int FANWEI=10000;// n : -n ~ +n int inum; int j=0; int m=0; int i=0,r=0,k=0; String snum=""; String fileName="number.txt"; int [] num=new int[LENGTH]; int array[]=new int[LENGTH]; long maxsum=array[0]; long maxstart=array[0]; try { File f=new File(fileName); if(!f.exists()) { throw new Exception("文件"+fileName+"不存在"); } //写入 FileWriter fw=new FileWriter(f); PrintWriter pw=new PrintWriter(fw); for(r=0;r<10;r++) { for( k=0;k<LENGTH;k++,m++) { inum=(int)(1+Math.random()*FANWEI*2)-FANWEI; pw.print(inum+" "); if(m==20) { pw.print(" "); m=0; } } pw.flush(); } //读取 FileReader fr=new FileReader(f); Scanner in=new Scanner(fr); if(!in.hasNext()) { throw new Exception("文件"+fileName+"内容为空"); } while(in.hasNext()) { /*if(j>=LENGTH) { System.out.println("数字过多,多于"+LENGTH+"将不予读取"); break; }*/ if(maxstart<0) { maxstart=0; } maxstart+=in.nextInt(); if(maxstart>=(Long.MAX_VALUE/2-1)||maxstart<=(Long.MIN_VALUE/2-1)) { throw new Exception("数字过大溢出"); } if(maxstart>maxsum) maxsum=maxstart; j++; } System.out.println("答案为: "+maxsum); } catch(InputMismatchException e2) { System.out.println("数字过大或输入格式不对"); } catch(Exception e) { System.out.println("错误于: "+i); System.out.println("错误!!!"); System.out.println(e.getMessage()); e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println("程序运行时间:"+(end-start)+"ms");
}
}
实验要求
1.要求数组从文件读取。
2.如果输入的数组很大,并且有很多大的数字,就会产生比较打的结果(考虑溢出),保证程序正常输出。
3.如果输入文件的参数有错误,这个程序应该能正常输出,并显示相应的错误。任何输入错误都不能导致你的程序崩溃。