返回一个整数数组中最大子数组的和。(续)

实验要求:

1.要求数组从文件读取。

2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。

3.另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Scanner;

public class Shuzu{
    /*public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            System.out.println("输入10个数");
            int num[]=new int[10];
            int sum=0;
            int sum1=0;
            for(int i=0;i<10;i++) {
                num[i]=sc.nextInt();
                if(num[i]>sum) {
                    sum=num[i];
                }
            }
            for(int i=0;i<10;i++) {
                sum1=num[i];
                for(int j=i+1;j<10;j++) {
                    sum1=sum1+num[j];
                    if(sum1>sum) {
                        sum=sum1;
                    }
                }
            }
            System.out.println("最大和为:"+sum);
       }*/
    
        static String s="";
        
    
    public static void main(String[] args) throws IOException {

        chansheng();
        read();
        String[] rang=s.split("[^(-9--10-9)]");
        BigInteger value=new BigInteger("0");
        BigInteger sum=new BigInteger(String.valueOf(rang[0]));
        for(int i=0;i<rang.length;i++) {
            int a=value.compareTo(BigInteger.valueOf(0));
            if(a==0||a==-1) {
                value=new BigInteger(String.valueOf(rang[i]));
            }else {
                value.add(new BigInteger(String.valueOf(rang[i])));
                
            }
            if(sum.compareTo(value)==-1) {
                sum=value;
            }
        }
        System.out.println("最大值为:"+sum);
    }
    
    
    public static String read() throws IOException {
        FileInputStream fis =new FileInputStream("leitianyushishabi.txt");
        BufferedReader br =new BufferedReader(new InputStreamReader(fis));
        String temp=" ";
        while((temp = br.readLine())!=null) {
            s= s+temp +"\n";
        }
            fis.close();
            br.close();
            
            return s;
        
    }
    
    
    public static void chansheng() throws IOException {
        int n;
        System.out.println("请输入要产生的数量:");
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        File file1=new File("leitianyushishabi.txt");
        FileWriter out=new FileWriter(file1);
        BufferedWriter bw =new BufferedWriter(out);
        for(int i=0;i<n;i++) {
            int ran =(int) ((int) (Math.random()*100000000)-Math.random()*100000000);
            BigInteger a=new BigInteger(String.valueOf(ran));
            bw.write(String.valueOf(a)+" ");
        }
        bw.close();
    }
}

反思:自己不会的东西还是太多,看到这道题的时候自己思路混乱,分解成小问题之后也是混乱至极,以至于所有问题都没有解决,无奈之下在网上搜了别人的代码借鉴了借鉴,自己需要学习的还有很多呀

猜你喜欢

转载自www.cnblogs.com/quyangzhangsiyuan/p/10545993.html