返回一个整数数组中最大子数组的和(二)
题目要求:返回一个整数数组中最大子数组的和
具体要求:程序要使用的数组放在一个叫 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) { 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 ) { if(a[i]>maxsum) maxsum=a[i]; } } System.out.println("最大子数组的和为:" + maxsum); } }
效果图: