设计思路 : 本题为个人作业1的续 要求在数量级 与数值范围上做突破 同时要抛出错误 安全退出
首先 在数量级上 我使用了double 类型 在数量上 for循环是可以的 但是比较慢 我试了100万100万级 的数没报错 但是显示的 比较慢 不知道是神魔原因
package main; 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.io.PrintStream; import java.util.Scanner; public class Item { @SuppressWarnings("resource") public static void main(String args[]) throws Exception { System.out.println("输入数量 n和数量级m:"); Scanner in=new Scanner(System.in); int n=in.nextInt(); Scanner in1=new Scanner(System.in); int m=in1.nextInt(); PrintStream ps = new PrintStream("C:\Users\long.19981105\Desktop/Ditie.txt"); for(int i=0;i<n;i++) { System.setOut(ps);//把创建的打印输出流赋给系统。即系统下次向 ps输出 System.out.print(random(m)+" "); }//在txt文件中输出 n 个 数量级 为 m 的数。 File file = new File("C:\Users\long.19981105\Desktop/Ditie.txt"); double[] a = getLineFromTxt(file," "); for(int i = 0; i< a.length; i++){ System.out.println("a["+i+"] = "+a[i]); } System.out.println(findMax(a)); } /* * 读取txt到数组 */ public static double[] getLineFromTxt(File file, String split) throws Exception{ BufferedReader br = new BufferedReader(new FileReader(file)); String firstLine = br.readLine(); //就读第一行 String[] arrs = firstLine.split(" "); //将字符数组转为double数组 double[] arr = new double[arrs.length]; for(int i = 0; i< arr.length; i++){ arr[i] = Double.parseDouble(arrs[i]); } if(br!= null){ br.close(); br = null; } return arr; } /* * 最大子数组 和 */ public static double findMax(double array[]){ //加上约束条件,防止当数组为空时造成数组越界 if (array.length == 0) { return 0; } double max = array[0]; double sum = 0; for(int i=0; i<array.length; i++){ //如果加上某个元素sum>=0的话,就加; //当数组全为负数的时候只要有加法就一定比原来的数小,此时就相当于找出数组内最大的数 if(sum >= 0) { sum += array[i]; } else{ sum = array[i]; //否则从当前位置重新计算 } if(sum > max){ max = sum; } } return max; } /* * 生成m数量级的随机数 */ public static int random(int m) { int num=(int)((Math.random())*m); return num; } /* * 输出到文件中 */ public static void writeFile() { try { File writeName = new File("C:\\Users\\long.19981105\\Desktop/Ditie.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件 writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖 try (FileWriter writer = new FileWriter(writeName); BufferedWriter out = new BufferedWriter(writer) ) { out.write(""); // 即为换行 out.write(""); // 即为换行 out.flush(); // 把缓存区内容压入文件 } } catch (IOException e) { e.printStackTrace(); } } }
100万数量级的 未能算出结果 抛出错误也未能实现
个人反思 :
数量级 不能仅用数字类型来限定 现实生活中 总会有超出 范围的一天
代码要有 现实意义 安全退出 是数据保存的重要依据