zoukankan      html  css  js  c++  java
  • 个人作业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位数的数字)

  • 相关阅读:
    HDinsight 系列-使用证书登陆中国区Azure
    PowerBI 应用时间智能(生成日期表)
    Hadoop 常用命令之 HDFS命令
    Hadoop分布式集群安装
    DAX:New and returning customers
    Hadoop 安装过程中出现的问题
    ftp 报错 200 Type set to A
    LC.exe 已退出,代码为-1 问题解决
    C# 文件操作
    EfRepository
  • 原文地址:https://www.cnblogs.com/zwang/p/10548316.html
Copyright © 2011-2022 走看看