首先设计思路很简单,就是根据上次那个个人作业1改编的,主要就是实现大数和读取文件的操作,在大数上利用java的BigInteger类。
源程序代码如下:
package test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
public class Test {
//将文件的数据写进数组
public static BigInteger[]getLineFromTxt(File file,String split){
BufferedReader br=null;
try {
br = new BufferedReader(new FileReader(file));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String firstLine = null; //只读取一行
try {
firstLine = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(split!=" ")
System.out.println("文件格式不正确");
String []arrs=firstLine.split(" ");
BigInteger[]arr=new BigInteger[arrs.length];
System.out.println(arrs.length);
for(int i=0;i<arr.length;i++) {
arr[i]= new BigInteger(arrs[i]);
}
if(br!=null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
br=null;
}
return arr;
}
public static void main(String []args) {
//读取文件
File file=new File("D://demo-02.txt");
System.out.println("文件路径成功");
BigInteger a[]=getLineFromTxt(file, " ");
System.out.println("数组元素为:");
for(int i=0;i<a.length;i++) {
System.out.println("a["+i+"]="+a[i]);
}
BigInteger max=a[0];
for(int i=0;i<a.length;i++) {
if(a[i].compareTo(max)>0) {
max=a[i];
}
}
//求最大子数组(借用百度的思想)
BigInteger MaxSum=max;
BigInteger P=BigInteger.valueOf(0);
BigInteger Sum=BigInteger.valueOf(0);
for(int i=0;i<a.length;i++) {
Sum=(Sum.add(a[i]));
if(Sum.compareTo(MaxSum)>0) {
MaxSum=Sum;
}
if(Sum.compareTo(P)<0) {
Sum=BigInteger.valueOf(0);
}
}
System.out.println("最大子数组和为:"+MaxSum);
}
}
效果截图如下:
*****************************************************************************************************
最后说下个人反思吧:
我觉得自己做这么慢的原因首先还是因为自己对这方面的知识不熟悉,就连随机数都要去百度上查找,这在一定范围内是很浪费时间的,对大数和读取文件这一方面的知识更是不了解,所以只能一步步地去百度上查找;
所以自己不懂得东西还是太多太多,要想精通这门语言还是需要去学习很多很多的知识,要花更多的时间在编程上,毕竟看的多了,做的多了,也就越来越熟悉了。