实验要求:
设计思路:利用Random函数产生随机数并将其存入shuzu.txt文件中,然后利用BufferedReader读取文件中的数组,并将其存入数组s中,随后求取其最大子数和,利用上篇博客的方法计算。
源程序代码:
package shuzu; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; import java.util.Scanner; public class shuzu1 { static String s=""; static Scanner in=new Scanner(System.in); public static void main(String[] args)throws IOException{ read(); Random(); max(); } public static void max() { String[] rang = s.split("[^(-9--10-9)]"); BigInteger max=new BigInteger("0"); BigInteger maxsum=new BigInteger(String.valueOf(rang[0])); for(int i=0;i<rang.length;i++) { int a=max.compareTo(BigInteger.valueOf(0)); if(a==0||a==-1) { max=new BigInteger(String.valueOf(rang[i])); } else { max.add(new BigInteger(String.valueOf(rang[i]))); } if(maxsum.compareTo(max)==-1) { maxsum=max; } } System.out.println("最大值为:"+maxsum); } //读取文件的方法 public static String read() throws IOException{ FileInputStream file=new FileInputStream("d:\shuzu.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(file)); String temp=""; while((temp = br.readLine()) != null) s=s+temp+" ";//存入字符串s中 file.close(); br.close(); return s; } public static void Random() throws IOException{ int n=5000000; File fi=new File("d:\shuzu.txt"); FileWriter out = new FileWriter(fi); BufferedWriter bw = new BufferedWriter(out); for(int i = 0;i < n ; i++) { int ran = (int)(Math.random()*10000000); BigInteger a = new BigInteger(String.valueOf(ran)); bw.write(String.valueOf(a) + " "); } bw.close(); } }
结果截图:
个人反思:
个人对文件的处理并不熟悉,通过查询百度勉强写出文件的读取操作。以及数组过多溢出的问题,将int类型转化为
BigInteger类型,由于对其用法的不熟悉,代码敲写太慢,在百度上查询了一些其用法,再就是这个只能运行百万级,对于千万级或者上亿的数据还不行。