Fork me on GitHub

数组从文件读取判断子数组的最大值

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()函数,以后我会再接再厉,争取学好这门课程。

posted @ 2019-03-16 18:08  今天123  阅读(230)  评论(0编辑  收藏  举报
1