• 个人作业数组续


    新问题:

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

    设计思想:

           这个问题和之前那个大体一样,就是加了一个文件输入和非法输入的处理。查了一下之前学过的文件输入,用空格区分每一个数字,这样就把他们存到数组里了。对于文件内容非法和内存溢出问题,用到上学期学的异常监测,之后就和上一个问题一样了。

    源代码:

           

    package wenjian;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStreamReader;
    
    public class zong {
    	public static void main(String arg[]) {
            try {
                String encoding = "UTF-8"; //可解决中文乱码问题 
    
                File file = new File("F:/shujv.txt");
                if (file.isFile() && file.exists()) {
                    InputStreamReader read = new InputStreamReader(
                            new FileInputStream(file), encoding);
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTXT = null;
                    String allNumString = "";
                    int max=0;
                    int[] array = null;
                    while ((lineTXT = bufferedReader.readLine()) != null) {
                      
                        System.out.println(lineTXT.toString().trim());  // 读出的每一行
                        allNumString += lineTXT+" ";   //通过空格分隔数字
                    }
                    if(allNumString != null && !"".equals(allNumString)){
                        String[] numbers =  allNumString.split(" ");
                        array = new int[numbers.length];
                        for (int i = 0; i < numbers.length; i++) {//循环赋值
                            array[i] = Integer.parseInt(numbers[i]);
                        }
                    }
                    for (int i = 0; i < array.length; i++) {
                        System.out.println("数组["+i+"]:"+array[i]);
                    }
    
                    for(int b=0;b<array.length;b++)//最外层循环控制这个子数组的头
                  	 {
                  		for(int c=b;c<=array.length;c++)//中层循环控制这个子数组的尾
                  		{
                  			int sum=0;
                  			for(int d=b;d<c;d++) //内层循环从头加到尾
                  			{
                  				 
                  				 sum=sum+array[d];
                  				
                  				if(max<=sum)//通过比较把最大的子数组和赋给max
                  				{
                  					max=sum;
                  				}
                  			}
                  		}
                  	 }  
                    System.out.print("子数组和的最大值为:"+max);
                    read.close();
                } else {
                    System.out.println("找不到指定的文件!");
                }
            } catch (Exception e) {
                System.out.println("读取文件内容操作出错");
                e.printStackTrace();
            }
            
                   
        }
    				
    	}
    

      运行截图:

    总结:对于大数据和大数的处理应该还有更好的解决办法,简单的用到一个异常处理感觉是不够的,要再深入学习一下。

  • 相关阅读:
    2011大纽约区域赛试题 Decoding EDSAC Data 解题报告
    湘大OJ第1484题 Allocation of Memory
    谈谈对js作用域的理解与疑问,请各位指正。
    Closure Linter工具介绍,挺好用的。
    JSTL标签用法
    守柔WORD编程代码集 CHM版
    返回任意输出月的最后一天
    Spring中MultipartHttpServletRequest实现文件上传
    SPringMVC注解驱动 .
    账号正在另一客户端登录 判断方法
  • 原文地址:https://www.cnblogs.com/xuange1/p/10542705.html
Copyright © 2020-2023  润新知