zoukankan      html  css  js  c++  java
  • 个人作业数组续

    新问题:

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

    设计思想:

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

    源代码:

           

    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();
            }
            
                   
        }
    				
    	}
    

      运行截图:

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

  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/xuange1/p/10542705.html
Copyright © 2011-2022 走看看