返回一个整数数组的最大子数组和(2)
作者:互联网
题目要求:返回一个整数数组中最大子数组的和
具体要求:程序要使用的数组放在一个叫 input.txt 的文件中
文件格式是:
数组的行数,数组的列数,
每一行的元素用逗号分开,每一个数字都是有符号32位整数。 当然, 行数和列数都是正整数。
例如下面的文件说明数组是有1行, 6列 , 元素依次是: 5, 6, –3, 8, –9, 2
安全性扩展:
如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩。
源代码:
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("/Users/txt/input.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);
}
}
值得注意的是,一开始我用mac的自带文本编辑编辑了要存放的数组,格式后缀是rtf,报错
For input string: "{\rtf1\ansi\ansicpg936\cocoartf2636"
字符编码错误
解决办法是在文本编辑里选择纯文本编辑,让后缀变为txt就可以了。
标签:返回,java,int,sum,整数,数组,import,maxsum 来源: https://www.cnblogs.com/lyf3701/p/16029888.html