紧接上次要求,这次的作业添加了新的功能:
要求数组从文件读取。
如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
设计思路:
1.定义一个一维数组用来记录读取的数据
2.定义length用以统计文件中数据的个数。
3.读取文件中的数据,存储在数组中。
4.比较求和,输出最大值。
源代码:
package project; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import java.util.Scanner; public class read1 { public static void main(String args[]) { String p="D:\1.txt"; File f=new File(p); if(f.isFile()) { if(f.exists()) { System.out.println("文件存在。"); File file = new File("D:\1.txt"); if(file.exists() && file.length() == 0) { System.out.println("文件为空,请输入数据"); } else { long array[]=new long[1000000]; long length=0; long sum,a; //读取数据 BufferedReader br = null; try { br = new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String tmp; try {int i=0; while((tmp = br.readLine()) != null){ array[i]=Integer.parseInt(tmp); i++; length++; } } catch (NumberFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { br.close(); } catch (IOException e) { e.printStackTrace(); } sum=(int) array[0]; a=(int) array[0]; for(int i=1;i<length;i++) { if(a<0) { a=0; } a+=array[i]; if(a>0) { sum=a; } } System.out.println("数组最大值为:"+sum); } } } else { System.out.println("查找文件不存在。"); } } }
结果截图:
这是文件中的数据
这是实验结果。
个人反思:
这次的作业只完成了前两点,处理异常突发问题还是不太理解,程序修改了很多次也一直在报错,无奈放弃。