• 个人作业 数组(续)


    实验要求:

    设计思路:利用Random函数产生随机数并将其存入shuzu.txt文件中,然后利用BufferedReader读取文件中的数组,并将其存入数组s中,随后求取其最大子数和,利用上篇博客的方法计算。

    源程序代码:

    package shuzu;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.math.BigInteger;
    import java.util.Scanner;
    
    
    
    public class shuzu1 {
        static String s="";
        static Scanner in=new Scanner(System.in);
        
        public static void main(String[] args)throws IOException{
    
            read();
            Random();
            max();
            
        }
        public static void max() {
        String[] rang = s.split("[^(-9--10-9)]");  
        BigInteger max=new BigInteger("0");
        BigInteger maxsum=new BigInteger(String.valueOf(rang[0]));
        for(int i=0;i<rang.length;i++) {
            int a=max.compareTo(BigInteger.valueOf(0));
            if(a==0||a==-1) {
                max=new BigInteger(String.valueOf(rang[i]));
            }
            else {
                max.add(new BigInteger(String.valueOf(rang[i])));
            }
            if(maxsum.compareTo(max)==-1) {
                maxsum=max;
            }
        }
        System.out.println("最大值为:"+maxsum);
        }
        //读取文件的方法
        public static String read() throws IOException{
            FileInputStream file=new FileInputStream("d:\shuzu.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(file));
            String temp="";
             while((temp = br.readLine()) != null) 
                    s=s+temp+"
    ";//存入字符串s中
            file.close();
            br.close();
            return s;
        }
        public static void Random() throws IOException{
            int n=5000000;
            File fi=new File("d:\shuzu.txt");
            FileWriter out = new FileWriter(fi);
            BufferedWriter bw = new BufferedWriter(out);
            for(int i = 0;i < n ; i++) {
                int ran = (int)(Math.random()*10000000);
                 BigInteger a = new BigInteger(String.valueOf(ran));
                 bw.write(String.valueOf(a) + " ");
            }
            bw.close();
            
        }
        
    }
        

    结果截图:

    个人反思:

    个人对文件的处理并不熟悉,通过查询百度勉强写出文件的读取操作。以及数组过多溢出的问题,将int类型转化为

    BigInteger类型,由于对其用法的不熟悉,代码敲写太慢,在百度上查询了一些其用法,再就是这个只能运行百万级,对于千万级或者上亿的数据还不行。
  • 相关阅读:
    Java单例模式深入详解
    深入理解Java的接口和抽象类
    java中为什么要给类使用代理?它有哪些好处?
    Log4j--java日志
    Log4j rootLogger配置
    selenium之 下拉选择框Select
    关于弹框
    spring controller接口中,用pojo对象接收页面传递的参数,发现spring在对pojo对象赋值时,有一定顺序的问题
    navicat mysql报错误:2013 Lost connection to MySQL server during query
    记录一次mysql导入千万条测试数据过慢的问题!
  • 原文地址:https://www.cnblogs.com/1061321925wu/p/10549295.html
Copyright © 2020-2023  润新知