数组(续)

要求:数组从文件中读取

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

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

设计思路:1、数的溢出:通过java.math里的BigInteger存储最大子数组和

 

源码

package shuzu; import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger; public class shuzu{     public static void main(String[] args) throws IOException
    {
        String fileName ="D:\\shuzu.txt";
        File file=new File(fileName);
        if(!file.exists())
        {
            System.out.println("文件不存在!");
        }
        else if(file.exists() && file.length() == 2)
        {
            System.out.println("文件为空!");
        }
        else
        {
            FileReader fileReader = new FileReader(fileName);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String line;
            int i,j;
            int flag=0;
            BigInteger[] m=new BigInteger[100000000];
            while ((line=bufferedReader.readLine())!=null)
            {
                String []s=line.split(",");
                for(i=0;i<s.length;i++)
                {
                    String k=s[i];
                    for(j=0;j<k.length();j++)
                    {
                        if(!((k.charAt(j)>='0'&&k.charAt(j)<='9')||k.charAt(j)=='-'||k.charAt(j)==','))
                        {
                            System.out.println("文件输入不合法,必须全部由数字组成,中间分割用逗号!");
                            flag=1;
                            break;
                        }
                    }
                    BigInteger k1=new BigInteger(k);
                   m[i]=k1;
                   if(flag==1)
                    break;
                }
                for(i=1;i<s.length;i++)
                {
                 if(m[i].add(m[i-1]).intValue()>m[i].intValue())
                 {
                  m[i]=m[i].add(m[i-1]);
                 }
                }
                for(i=0;i<s.length;i++)
                {
                 if(m[i].subtract(m[0]).intValue()>=0)
                 {
                  m[0]=m[i];
                 }
                }
                if(flag==1)
                 break;
            }
            System.out.println(m[0]);
            bufferedReader.close();
            fileReader.close();
         }
   }
}

结果截图

数组(续)

 

 

数组(续)

 

上一篇:ZJNU 2345 - 小Y的方格纸


下一篇:一位数组从文件中获取时(求出最大子数组的和并且正确处理错误的信息)