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

  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. curl 常用操作总结

    前言 curl 是一个强大的命令行工具,支持 HTTP, HTTPS, SCP 等多种协议,本文主要总结一下其常用的功能,方便及时查阅. curl --version curl 7.68.0 (x86 ...

  2. 无监督域对抗算法:ICCV2019论文解析

    无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...

  3. 多核片上系统(SoC)架构的嵌入式DSP软件设计

    多核片上系统(SoC)架构的嵌入式DSP软件设计 Multicore a System-on-a-Chip (SoC) Architecture SoCs的软件开发涉及到基于最强大的计算模型在各种处理 ...

  4. 实时双频Wi-Fi如何实现下一代车内连接

    实时双频Wi-Fi如何实现下一代车内连接 How real simultaneous dual band Wi-Fi enables next-generation in-vehicle connec ...

  5. 工作流引擎Activiti使用进阶!详细解析工作流框架中高级功能的使用示例

    Activiti高级功能简介 Activit的高级用例,会超越BPMN 2.0流程的范畴,使用Activiti高级功能需要有Activiti开发的明确目标和足够的Activiti开发经验 监听流程解析 ...

  6. 【渗透实战】sqlmap_修改tamper脚本_绕过WAF_第三期

    /文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334/ 今天google找注入点的时候发现某企业一个挺有意思的waf 常规操作绕过去后决定写一篇博客 信息收集 ...

  7. Python跨域问题解决集合

    Flask 安装插件 pip install flask-cors 使用 CORS函数配置全局路由 from flask_cors import * app = Flask(__name__) COR ...

  8. 『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别

    目录 1.什么是计算机语言 2.高级语言中的编译型语言和解释型语言 (1)编译型语言 (2)解释型语言 (3)编译型语言和解释型语言执行流程 3.知识扩展: 4.关于Python 1.什么是计算机语言 ...

  9. 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程)

    1.简介 jmeter系列的文章结束,本来想趁热打铁顺别将Jmeter和接口测试介绍一下,但是感觉Jmeter时间太长了怕大家吃腻了,还有一个原因就是许多小伙伴们或者童鞋们私信问宏哥什么时候可以有ja ...

  10. Go语言深度比较值是否相等

    Go语言深度比较值是否相等 需求描述: 我们在开发过程中经常会遇到一些需要比较值是否相等的场景,例如比较两个数组.结构体.Map.等,自己写这些代码比较繁琐,大部分时候这里都可以使用到反射reflec ...