这次在求数组的子数组之和的最大值的条件下又增加了新的约束:

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

设计思路:

  1.首先就是对文件的读取,从文件中读取数组,将按行读取的数组进行分割,存储

  2.接入求最大值函数,调用数组,调整类型,对于大数进行处理,在求数组的子数组之和的最大值处参考了O(n)的算法

  3.对文件读取等进行异常处理

截图:

  1 package test2;
2 import java.io.BufferedReader;
3 import java.io.File;
4 import java.io.FileReader;
5 import java.io.IOException;
6 import java.util.ArrayList;
7
8 public class shuzu2 {
9
10 public static void readFileByLines(String fileName) {
11 File file = new File(fileName);
12 BufferedReader reader = null;
13 try {
14 reader = new BufferedReader(new FileReader(file));
15 String tempString = null;
16
17 while ((tempString = reader.readLine()) != null) {
18
19 System.out.println(tempString);
20
21 }
22 reader.close();
23 } catch (IOException e) {
24 e.printStackTrace();
25 } finally {
26 if (reader != null) {
27 try {
28 reader.close();
29 } catch (IOException e1) {
30 }
31 }
32 }
33 }
34
35 public static long[] toArrayByFileReader1(String name) {
36 // 使用ArrayList来存储每行读取到的字符串
37 ArrayList<String> arrayList = new ArrayList<>();
38 try {
39 FileReader fr = new FileReader(name);
40 BufferedReader bf = new BufferedReader(fr);
41 String str;
42 // 按行读取字符串
43 while ((str = bf.readLine()) != null) {
44 arrayList.add(str);
45 }
46 bf.close();
47 fr.close();
48 } catch (IOException e) {
49 e.printStackTrace();
50 }
51 // 对ArrayList中存储的字符串进行处理
52 int length = arrayList.size();
53 long[] array = new long[length];
54 for (int i = 0; i < length; i++) {
55 String s = arrayList.get(i);
56 array[i] = Long.parseLong(s);
57 }
58
59 long f=0;//定义整形变量f,为子数组最大值
60 long sum=0;//定义整形变量sum,为子数组求和
61 for(int i=0;i<length;i++)
62 {
63 sum = sum+array[i];
64 if(sum < 0)
65 {
66 sum=0;
67 }
68 if(sum > f)
69 {
70 f = sum;
71 }
72 }
73
74 if(sum == 0)
75 {
76 for(int i=0;i<length;i++)
77 {
78 if(i == 0)
79 {
80 f = array[i];
81 }
82 if(f < array[i])
83 {
84 f = array[i];
85 }
86 }
87 }
88
89 System.out.println("该数组的子数组之和的最大值为:"+f);
90
91
92 // 返回数组
93 return array;
94 }
95
96
97 public static void main(String[] args) throws IOException{
98
99 String name = new String("E:\\Program Files\\eclipse操作\\shuzu\\src\\test2\\input.txt");
100
101 readFileByLines(name);
102 toArrayByFileReader1(name);//文件路径
103
104 }
105 }

反思:

对于大数的处理还不是很熟悉,在课上听同学们的交流,应该采用随机生成数的方式,随机产生随机个数的数字,用来测试读取数字的最大个数,这一点没有实现,还有异常处理也没有实现,对于不合法数字、文件读取等方面的处理还不会。这次更充分的体现了分步的重要性,如果不分步的话,会感觉到十分吃力,会感觉到无从下手,这种东西还是得多练。

求数组的子数组之和的最大值II的更多相关文章

  1. 求数组的子数组之和的最大值III(循环数组)

    新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...

  2. C#中求数组的子数组之和的最大值

    <编程之美>183页,问题2.14——求子数组的字数组之和的最大值.(整数数组) 我开始以为可以从数组中随意抽调元素组成子数组,于是就有了一种想法,把最大的元素抽出来,判断是大于0还是小于 ...

  3. 求数组的子数组之和的最大值IV

    在之前的基础上又安排了二维数组的,在课上一开始是理解错要求了,简单的以为用循环数组就能解决,但是却忽视了子数组是否能构成矩形,之后课下和同学们讨论,主要是多重遍历,但是我还是没搞明白怎么构成新的二维数 ...

  4. N元数组的子数组之和的最大值

    题目:有N个整数的元素的一维数组,求子数组中元素之和中最大的一组(思想:动态规划) 分析: 设该数组为array[N], 那么对于array[i]该不该在元素之和最大的那个子数组中呢?首先,不如假设a ...

  5. 求二维数组联通子数组和的最大值 (联通涂色) beta!

    算法十分臃肿,效率捉鸡,不知用了多少循环,还有bug...任重道远,编程之美. 思想:按行遍历,找出每行的最大子数组.若行间都联通,行最大子数组相加后,再加上独立的正数.若行间不连通,找出较大子路径, ...

  6. [LeetCode] Minimum Size Subarray Sum 最短子数组之和

    Given an array of n positive integers and a positive integer s, find the minimal length of a subarra ...

  7. Minimum Size Subarray Sum 最短子数组之和

    题意 Given an array of n positive integers and a positive integer s, find the minimal length of a suba ...

  8. [LeetCode] 209. Minimum Size Subarray Sum 最短子数组之和

    Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...

  9. lintcode:子数组之和为0

    题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...

随机推荐

  1. npm基本用法及原理(10000+)

       作为前端开发者,应该每个人都用过npm,那么npm到底是什么东西呢?npm run,npm install的时候发生了哪些事情呢?下面做详细说明. 1.npm是什么 npm是JavaScript ...

  2. TinyML设备设计的Arm内核

    TinyML设备设计的Arm内核 Arm cores designed for TinyML devices Arm推出了两个新的IP核,旨在为终端设备.物联网设备和其低功耗.成本敏感的应用程序提供机 ...

  3. 孟老板 BaseAdapter封装(五) ListAdapter

    BaseAdapter封装(一) 简单封装 BaseAdapter封装(二) Header,footer BaseAdapter封装(三) 空数据占位图 BaseAdapter封装(四) PageHe ...

  4. selenium元素定位陷阱规避

    为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...

  5. 安全Web服务器

    https协议: 443 端口 虚拟Server0: 1.部署 网站证书(营业执照)# cd /etc/pki/tls/certs/ # wget http://classroom.example.c ...

  6. Java面试指北!13个认证授权常见面试题/知识点总结!| JavaGuide

    大家好,我是 Guide哥!端午已过,又要开始工作学习啦! 我发现有很多小伙伴对认证授权方面的知识不是特别了解,搞不清 Session 认证.JWT 以及 Cookie 这些概念. 所以,根据我根据日 ...

  7. Spring Boot WebFlux-09——WebFlux 集成测试及部署

    第09课:WebFlux 集成测试及部署 前言 在日常工作中,免不了自测 UT,因为覆盖率不达标,是不允许提交测试,那怎么进行 WebFlux 项目的测试呢.@WebFluxTest 是 WebFlu ...

  8. 大家看看大佬对Maven仓库的讲解,有何高明之处?

    Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方). 分类 maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分 ...

  9. .NET Core/.NET5/.NET6 开源项目汇总4:CMS、Blog项目

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...

  10. Mac为docker和kubectl添加自动命令补全

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 自动命令补全是非常有用的功能,特别是当命令有特别多参数时.显然,docker/kubectl就是这样的命令.我们 ...