zoukankan      html  css  js  c++  java
  • Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组

      从我上一篇随笔中,我们可以得到最大连续子数组。

      按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Random;
    
    public class Main {
        public static void main(String[] args) {
            File f = new File("C:/D/shuzu.txt");
    
            if(!f.exists())
                try {
                    f.createNewFile();
                    
                } catch (IOException e1) {
                    // TODO 自动生成的 catch 块
                    e1.printStackTrace();
                }
            try {
                PrintWriter pw = new PrintWriter(f);
                for(double i=0;i<90000;i++) {
                    Random r=new Random();
                    int i1=r.nextInt(1000);//设置的是0-1000的随机数,然后是每3个写入一个负数
                    if(i%3==0) {
                        i1=0-i1;
                    }
                    pw.print(i1);
                    pw.print(",");
                    if(i==80000) {
                        System.out.println("到这里了");
                    }
                }
                pw.close();
            } catch (FileNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }
    }

       这段代码的作用是在TXT文件中输入90000个-1000到1000的随机数,并且以英文的逗号作为分割。

      接下来我们需要进行的操作就是对这个90000个数值进行读取,我采取的方法是使用方法读取之后进读取到的以逗号作为分隔标志,将其储存到String数组中,然后开始对String数组中的每一个进行辨别,判断数组中的每一个元素时候为正数或者为负数,如果是负数则进行排除在计算之外,如果是的话就开始进行大数据字符串的运算,然后再依据上一篇博客的方法对连续的最大子数组进行判断即可。

      估计大家会问到,为什么是输出的是90000个随机数,而不是更大的数值,在第一个程序运行的时候,我发现当我的随机数生成的个数到1000000的时候,程序的运算量就开始变得相当的长,更重要的是在到了这个数量级的时候,即使程序能够显示出已经生成了900000个随机数,但是我的TXT文档却一直无法打开,老师分析的可能是写入的缓存区不够用了导致的,具体的原因我会在之后的时间里找一下问题所在。

      更新:最后证明是能够打开的,时间太长了,我的笔记本是i5 8250U,因为是低压U的关系,所以处理器的性能比起标压U的会小很多,所以在处理文件上会慢很多,所以就设置在了90000个地方稍微会快一点。

      接下来贴出运行代码:

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.math.BigInteger;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            // TODO Auto-generated method stub
            BigInteger TempNum=new BigInteger("0");
            BigInteger Big0=new BigInteger("0");
            BigInteger Max=new BigInteger("0");
            String subway_1=subway_1("C:/D/shuzu.txt");
            System.out.println(subway_1);
            for(int i=0;i<number.length;i++) {
                boolean flag=Isnumber(number[i]);
                if(flag==true) {
                    System.out.println("输入为数值!");
                    BigInteger BigNum=new BigInteger(number[i]);
                    TempNum=TempNum.add(BigNum);
                    int is=TempNum.compareTo(Big0);
                    if(is==-1) {
                        TempNum=new BigInteger("0");
                    }else {
                        int is2=TempNum.compareTo(Max);
                        if(is2!=-1) {
                            Max=TempNum;
                        }
                    }
                    System.out.println("读取的"+(i+1)+"个数值:"+BigNum);
                    System.out.println("最大值:"+Max);
                }
                else
                    System.out.println("输入不为数值!");
            }
        }
        private static  String[]number;
    
        private static  String subway_1(String file) throws IOException {
            // TODO Auto-generated method stub
            
             File f=new File(file);
                BufferedReader bf=new BufferedReader(new FileReader(f));
                String content="";
                content=bf.readLine();
                String[] temp = content.split(",");
                number=temp;
            return null;
        }
        private static boolean Isnumber(String num) {
            
            Pattern pattern = Pattern.compile("-?[0-9]+(.[0-9]+)?");
            Matcher isNum = pattern.matcher(num);
            if( !isNum.matches() ){
                return false;
            }
            return true;
        }
    
    
    
    }

      其实在这个问题中,分为几个模块就可以解决,1.写入数据,2.读取数据并进行拆分,同时检验数据时候符合规范,3.利用大数据字符串的方法来求较多数据情况下的连续字符串的运算。

  • 相关阅读:
    数据量过大时数据库操作的处理
    VC中回调函数的用法
    基于BindingSource的WinForm开发
    VC获取各类指针
    GetSystemMetrics()函数的用法
    samba建立个人专享网盘
    Windows 7下用Windows照片查看器打开图片速度变慢的解决方案
    这是一个模板
    QT中编译和使用OPENCV
    MFC日志(2011.4.9)
  • 原文地址:https://www.cnblogs.com/heiyang/p/10537682.html
Copyright © 2011-2022 走看看