• 个人作业2-数组(续篇)


    继上周的数组又提的进一步要求:     

          1.要求数组从文件读取。
          2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
          3.另外, 如果输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能导致你的程序崩溃。

    设计思路:

           我觉着解决这个问题一定要分步实现,首先别管后面要先实现数组从文件中读取,刚开始对我来说这步就挺难的,因为完全忘了文件读取的方式,然后我就去网上查了一下如何从文件中读取数据,一开始我是自己往文件里写数据,后来就开始通过控制台输入写入文件然后在读取

          第二步就是实现写入文件用随机数的形式,而不是手动输入,

          第三步考虑各种异常使程序不崩,比如文件是否存在,输入产生的随机数个数时是否为纯数字,文件是否读取成功

          第四步就是随机产生正负数的问题,我想过很多方法,但是后来我从网上找了一个比较简便的,利用这个int aa=(int)(Math.pow(-1, a));/*表示-1的a次方*/    产生负1或者正1然后乘以随机数,这样就可以随机出现正负数

          第五步考虑大数的问题,

          最后就是套用上次的子数组求和了

    https://vimsky.com/article/3417.html

    http://www.cnblogs.com/unknownname/p/8823887.html

    https://blog.csdn.net/qfikh/article/details/52832196

    我觉得这几篇文章还有别人的博客园给了我一些启发,最后利用BigInteger num2=new BigInteger(String.valueOf(num));
            bw.write(String.valueOf(num2));//来保证运算精度不溢出

          源代码:

    package array;
    
    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.math.BigInteger;
    import java.util.Scanner;
    
    public class array {
    public static void main(String[] args) {		
    	writeFile();
    	int datas[]=readFile();
    	for( int i=0;i<datas.length;i++) {
    		System.out.print(datas[i]+"   ");
    	}
    	int array[]=new int[datas.length];
    	int array2[]=new int[datas.length];
    	int n=datas.length;
    	for(int i=0;i<n;i++) {
    		array2[i]=0;
    		array[i]=datas[i];
    	}
    	int max;
    	for(int i=0;i<n;i++) {
    		int sum=0;
    		max=array[i];
    		for(int j=i;j<n;j++) {
    			sum=sum+array[j];				
    		if(max<sum) {
    			max=sum;
    		}
    		}
    			array2[i]=max;	
    			//System.out.println(max);
    	}
    	int k=array2[0];
    	for(int i=0;i<n;i++) {
    		if(array2[i]>k) {
    			k=array2[i];
    		}
    	}
    	System.out.println("最大值"+k);
    } 
    /* 写入txt文件*/
    public static void writeFile() {
    	
    		File f=new File("E:\txt\array.txt");
    		if(!f.exists()) {
    			try {
    				f.createNewFile();
    				System.out.println("array.txt创建完成");
    			} catch (IOException e) {
    				// TODO 自动生成的 catch 块
    				e.printStackTrace();
    				System.out.println("array.txt创建失败");
    			}			
    		}
    		FileWriter fw;
    		try {
    			fw = new FileWriter(f);
    		
    		BufferedWriter bw=new BufferedWriter(fw);	
    		System.out.println("请输入随机数的个数");
    		Scanner sc=new Scanner(System.in);
    		int n=0;
    		if(sc.hasNextInt()) {
    			 n=sc.nextInt();
    			System.out.println(n);
    		}
    		else {
    			System.out.println("请输入正确的数字~!");
    			System.exit(0);
    		}/*
    		hasNextInt()方法是判断控制台接收是否为数字,
    		当你在控制台输入一个字符的时候,hasNextInt()判断你输入这个字符是不是数字,
    		而不是接收值,当if判断通过之后执行接收,也就是你输入的那个字符,*/
    		for(int i=0;i<n;i++) {
    		int a=(int)(Math.random()*2+1);	
    		int aa=(int)(Math.pow(-1, a));/*表示-1的a次方*/	
    		int aaa=(int)(Math.random()*1000000000);
    		int num=aa*aaa;
    		BigInteger num2=new BigInteger(String.valueOf(num));
    		bw.write(String.valueOf(num2));//保证运算精度不溢出
    		bw.write(" ");	
    	}
    	bw.newLine();
    	bw.close();
    	fw.close();
    		} catch (IOException e) {
    			// TODO 自动生成的 catch 块
    			e.printStackTrace();
    		}
    }
    public static int[] readFile() {
    	FileReader fr;
    	try {
    		fr = new FileReader("E:\txt\array.txt");
    		BufferedReader br=new BufferedReader(fr);
    		String line;
    		String s="";
    		while ((line = br.readLine()) != null) {
                // 一次读入一行数据		
               s=s+line;
            }
    		String []data=s.split(" ");//按照空格分割字符串
    		int [] datas=new int[data.length];
    		for(int j=0;j<data.length;j++) {
    			datas[j]=Integer.parseInt(data[j]);
    		}
    		
    		return datas;
    	} catch (IOException e) {
    		// TODO 自动生成的 catch 块
    		e.printStackTrace();
    		System.out.println("读取文件失败");
    		return null;
    	}	
    }
    }
    
    	
    

     截图:

    个人反思:

    感触很深,花了整整一下午加晚上去弄这些,时间特别长,中间想过要放弃去找别人的用一用就完了,后来好在我没有,很开心最后终于弄完了,虽然瑕疵还不少,但是我觉得我逐渐地正在学会用分步的思想去解决问题,我觉得这对我来说也是一大进步,以后的我首先不要轻言放弃,一定要自己去尝试才有效果。然后继续努力,你还差得很远。

  • 相关阅读:
    scala学习手记7
    scala学习手记6
    scala学习手记5
    scala学习手记4
    scala学习手记3
    scala学习手记2
    Scala学习手记1
    Java实现的一个小说采集程序
    Java的值传递和引用传递
    java 使用反射
  • 原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/10549258.html
Copyright © 2020-2023  润新知