个人作业数组续
新问题:
要求数组从文件读取。 如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。 另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。
设计思想:
这个问题和之前那个大体一样,就是加了一个文件输入和非法输入的处理。查了一下之前学过的文件输入,用空格区分每一个数字,这样就把他们存到数组里了。对于文件内容非法和内存溢出问题,用到上学期学的异常监测,之后就和上一个问题一样了。
源代码:
package wenjian; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; public class zong { public static void main(String arg[]) { try { String encoding = "UTF-8"; //可解决中文乱码问题 File file = new File("F:/shujv.txt"); if (file.isFile() && file.exists()) { InputStreamReader read = new InputStreamReader( new FileInputStream(file), encoding); BufferedReader bufferedReader = new BufferedReader(read); String lineTXT = null; String allNumString = ""; int max=0; int[] array = null; while ((lineTXT = bufferedReader.readLine()) != null) { System.out.println(lineTXT.toString().trim()); // 读出的每一行 allNumString += lineTXT+" "; //通过空格分隔数字 } if(allNumString != null && !"".equals(allNumString)){ String[] numbers = allNumString.split(" "); array = new int[numbers.length]; for (int i = 0; i < numbers.length; i++) {//循环赋值 array[i] = Integer.parseInt(numbers[i]); } } for (int i = 0; i < array.length; i++) { System.out.println("数组["+i+"]:"+array[i]); } for(int b=0;b<array.length;b++)//最外层循环控制这个子数组的头 { for(int c=b;c<=array.length;c++)//中层循环控制这个子数组的尾 { int sum=0; for(int d=b;d<c;d++) //内层循环从头加到尾 { sum=sum+array[d]; if(max<=sum)//通过比较把最大的子数组和赋给max { max=sum; } } } } System.out.print("子数组和的最大值为:"+max); read.close(); } else { System.out.println("找不到指定的文件!"); } } catch (Exception e) { System.out.println("读取文件内容操作出错"); e.printStackTrace(); } } }
运行截图:
总结:对于大数据和大数的处理应该还有更好的解决办法,简单的用到一个异常处理感觉是不够的,要再深入学习一下。