个人作业2

设计思路 : 本题为个人作业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万数量级的 未能算出结果  抛出错误也未能实现

个人反思 :

   数量级 不能仅用数字类型来限定  现实生活中 总会有超出 范围的一天 

代码要有 现实意义 安全退出 是数据保存的重要依据

原文地址:https://www.cnblogs.com/1983185414xpl/p/10543915.html