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

 

 

 题目要求:返回一个整数数组中最大子数组的和

具体要求:程序要使用的数组放在一个叫 input.txt 的文件中

文件格式是:

数组的行数,

数组的列数,

每一行的元素用逗号分开,每一个数字都是有符号32位整数。 当然, 行数和列数都是正整数。
例如下面的文件说明数组是有1行, 6列 , 元素依次是: 5, 6, –3, 8, –9, 2

安全性扩展:
如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩。
设计思路:
(1)用BufferedReader从字符输入流中读取文本,缓冲各个字符
(2)分别用readLine()读取文本第一行数组长度,文本第二行各数组元素
(3)用Integer.parseInt(s)将字符转化为int类型用于后续比较
(4)存入a[]数组后,用(一)中相同方法进行比较
源代码:

package kehouzuoye;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class fileshuzuhe {
    
    public static void main(String[] args) throws IOException 
    {
        int length;
        int[] a=new int[10000];
        BufferedReader br= new BufferedReader(new FileReader("C:\\Users\\邱\\Desktop\\yuzi\\myFile.txt"));
        String[] s1=br.readLine().split(","); //readLine()是读取文件中的一行,读完这一行之后会自动指向下一行,返回的是一个字符串类型。
                                             //split() 方法用于把一个字符串分割成字符串数组。
        
        length=Integer.parseInt(s1[0]); // Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型。
        
        String[] s2=br.readLine().split(",");
        for(int i=0;i<length;i++) 
        {
            a[i]=Integer.parseInt(s2[i]);
        }
        
        int maxsum=0,sum=0;
        maxsum=a[0];
        for(int i=0;i<=length;i++)
        {
            sum = sum + a[i];
            if(sum<0) 
                sum=0;
            
            if(sum>maxsum)
                maxsum=sum;
        }
        
        if(maxsum==0) {
            maxsum=a[0];
            for(int i=1;i<length;i++) {
                if(a[i]>maxsum)
                    maxsum=a[i];
            }
        }
        
        System.out.println("最大子数组的和为:" + maxsum);
        
    }
}

效果图:

 

 

posted @ 2022-03-19 19:40  今天又双叒叕在敲代码  阅读(51)  评论(0编辑  收藏  举报