继上次返回所有子数组中和的最大值的问题,这次是把数值扩大至百万级以上,并保证参数出错时能正常退出,从文本文件中获取数值。得到这个题目是,我首先想到的是写一个随机函数能产生任意数量的大数并能存入文本文件,然后读取这些数值并存入一个整形数组,再利用上次的算法求出所有子数组的和的最大值。但我写代码是并没有考虑输入字符串等其他不是整数的情况,而且最大值设定在了正负
package 数组2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Random; import java.util.Scanner; public class shuzu2 { static Scanner in=new Scanner(System.in); public static void main (String[] args) throws IOException{ try { File file = new File("D:\java\eclipse\数组\shuzu.txt"); FileWriter fw = new FileWriter(file); BufferedWriter bw = new BufferedWriter(fw); Random random = new Random(); for(int i=0;i<10000;i++) { int randint =(int)Math.floor((random.nextDouble()*100000000.0)-50000000); bw.write(String.valueOf(randint)); bw.newLine(); } bw.close(); fw.close(); } catch (Exception e) { e.printStackTrace(); } FileReader reader = new FileReader("D:\java\eclipse\数组\shuzu.txt"); BufferedReader br = new BufferedReader(reader); String s1 = null; int num[]=new int[2000000]; int i=0,n=0; while((s1 = br.readLine()) != null) { num[i]=Integer.parseInt(s1); n++; i++; } br.close(); reader.close(); int max=0; int max2=0; max2=num[0]; for(int j=0;j<n;j++) { if(max<=0) { max=num[j]; }else { max+=num[j]; } if(max2<max) { max2=max; } } System.out.println("子数组最大和为:"+max2); } }
一亿以内。代码如下: