文件读取求最大子数组

   首先设计思路很简单,就是根据上次那个个人作业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);
	}

		
	}

  效果截图如下:

             

*****************************************************************************************************

  最后说下个人反思吧:

         我觉得自己做这么慢的原因首先还是因为自己对这方面的知识不熟悉,就连随机数都要去百度上查找,这在一定范围内是很浪费时间的,对大数和读取文件这一方面的知识更是不了解,所以只能一步步地去百度上查找;

        所以自己不懂得东西还是太多太多,要想精通这门语言还是需要去学习很多很多的知识,要花更多的时间在编程上,毕竟看的多了,做的多了,也就越来越熟悉了。

         

 

转载于:https://www.cnblogs.com/qianmo123/p/10548356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值