zoukankan      html  css  js  c++  java
  • 数组从文件读取判断子数组的最大值

    1.设计思路:想要从文件中读取数据,首先要建一个文件用来进行文件的读写,接着要通过for循环将读取出来的数值存储到数组中,我用的是ArrayList()定义的数组,完成文件中数据存储后,它的类型是String类型,此时就需要将此数组转换成为int类型的数组。然后和求子数组的最大和连接就行。

    2.源程序代码:

    package shuzu;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class ArrayMax {
        public static void main(String[] args){
            //
            File a=new File("d:/text1.txt");
            BufferedWriter writer=null;
            try {
                writer=new BufferedWriter(new FileWriter(a));
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入数组中数字个数的大小");
            long aa=sc.nextLong();
            for(long i=0;i<aa;i++) {
                long l=(long)(100-(Math.random()*10000)*(Math.random()>0.5?1:-1));//随机数
                String s=""+l;   //把l变为string类型                  如果大于0.5取1小于0.5取-1
                try {
                    writer.write(s);
                } catch (Exception e) {
                    // TODO: handle exception
                }
                try {
                    writer.newLine();//换行
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
                try {
                    writer.close();//写文件后关闭
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            //
            BufferedReader br = null;
             try {
                br=new BufferedReader(new FileReader(a));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String line;
            //需要转换为int
            ArrayList<String> d=new ArrayList<String>();
    //        ArrayList d=new ArrayList();
            try {
                while((line=br.readLine())!=null ) {
                //System.out.println(line);
                 d.add(line);
                 }
                int i=d.size();
                //System.out.println("i:"+i);
                br.close();
                writer.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            int tt[]=new int[d.size()];
            for(int i=0;i<d.size();i++) {
                int s=Integer.parseInt(d.get(i));
                tt[i]=s;
                System.out.println("tt="+tt[i]);
            }
            int maxsum,maxstart;
    //        Scanner in = new Scanner(System.in);
    //        System.out.println("请输入数组的大小:");
    //        number=in.nextInt();
     //         int [] array=new int[number];
    //        System.out.println("请输入数组的值:");
    //        for(i=0;i<number;i++)
    //        {
    //            array[i]=in.nextInt();
    //        }
            maxsum=tt[0];
            maxstart=tt[0];
            for(int i=1;i<d.size();i++)
            {
                if(maxstart<0)
                {
                   maxstart=0;
                }
                maxstart+=tt[i];
                if(maxstart>maxsum)
                    maxsum=maxstart;
                
            }
            System.out.println("子数组的最大和为:");
            System.out.println(maxsum);
           
        }
    
    }

    3.结果截图:

    4.个人反思:做此实验我从中学到了很多教训,首先就是文件的读写,通过将不同方法和类组合在一起可以写出一个功能强大的程序,但前提是需要了解各种函数的作用和使用方法。然后才能下手去做,接着就是各种类型之间的转换,例如String类型和int类型之间的转换就需要Integer.parseInt()函数,以后我会再接再厉,争取学好这门课程。

  • 相关阅读:
    Asp.Net中Word,Excel等office com组件操作权限的问题 ————转自rainpig2008
    正则表达式摘录
    html5 Canvas画图2:画线条
    彻底理解函数声明与函数表达式优先级问题
    javascript定义变量和优先级的问题
    html5 Canvas画图4:填充和渐变
    讨论下canvas画椭圆的方法
    html5 Canvas画图3:1像素线条模糊问题
    [推荐]实在受不了canvas的语法了!我要让他支持链式语法!
    html5 Canvas画图5:画曲线之arc
  • 原文地址:https://www.cnblogs.com/1502762920-com/p/10543421.html
Copyright © 2011-2022 走看看