个人作业1—续

个人作业1—数组续(文件)

题目要求:

       要求数组从文件读取;如果输入的数组很大,并且有很多大的数字,就会产生比较大的结果(考虑一下数的溢出),请保证你的程序能正常输出;另外,如果输入问价你的参数有错误,这个程序应该能正常退出,并显示相应的错误信息,任何输入错误都不能导致你的程序崩溃。

设计思想:运用文件操作,先向文件中写入一些数字,再将其读取出来存入字符串中,将该字符串按空格拆分把数字存入数组中,再利用上次作业的代码进行求最大子数组的和。

遇到的问题:文件读取与写入操作不熟练,基本上可以说是忘了,重新复习了一遍这方面的内容,才成功将程序编写出来。

package test;

import java.util.*;
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.util.Random;

public class shuzu {
    
    private static String s;

    public static int max(int a[],int n) {
        int sum=0;
        int b=0;
        for(int i=0;i<n;i++)//由n个数组成的数组,若前m(m<n)个数的和为非正数,则从第m个数重新开始相加
        {    
            if(b<0) b=a[i];
            else b+=a[i];
            if(sum<b) sum=b;
            }
        return sum;
}
public static void main(String[] args) {
    Random random=new Random();
    int k=0;
    File f1 = new File("F:\\output.txt");
       try {
        FileReader fr = new FileReader(f1);
        FileWriter fw=new FileWriter(f1);
        BufferedWriter bw =new BufferedWriter(fw);
        BufferedReader br = new BufferedReader(fr);
        if(f1.exists())System.out.println("文件存在");
        else System.out.println("文件不存在");
        for(int a=0;a<10000000;a++)
        {
            int rand=(int)Math.floor((random.nextDouble()*100000000.0));
            bw.write(String.valueOf(rand)); 
            bw.write(" ");//写入文件时,将数字用用空格隔开
        }
        String l;
        String s="";
     while((l=br.readLine())!=null){
        s=s+l;//将读取的数据存入一个字符串中
        }
     String []data=s.split(" ");//将字符串中的数字分离存入数组
       int []b=new int [data.length];
       for(int i=0;i<b.length;i++)//将读取的数据存入数组中
       {
           b[i]=Integer.parseInt(data[i]);
       }
       for(int p=0;p<b.length;p++)
       {
           System.out.println(b[p]);
       }
       System.out.print("最大子数组和为:");
        int t=b[0];
        for(int i=0;i<b.length;i++)
        {
            if(b[i]<0) {k++;}
        }
        if(k==b.length)//判断数组中的数字是否全为负数
        {
            for(int i=0;i<b.length;i++)
            {
                if(b[i]>t)
                    {
                     t=b[i];
                    }
            }
            System.out.println(t);
        }
        else System.out.println(max(b,b.length));
     bw.close();
       br.close();
        }catch (IOException e) {
      e.printStackTrace();
  }
 }
}

截图:

(输出了1000万个8位数的数字)

猜你喜欢

转载自www.cnblogs.com/zwang/p/10548316.html