个人作业数组续

新问题:

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

设计思想:

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

源代码:

       

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

  运行截图:

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

原文地址:https://www.cnblogs.com/xuange1/p/10542705.html