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

  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. “ compiler-rt”运行时runtime库

    " compiler-rt"运行时runtime库 编译器-rt项目包括: Builtins-一个简单的库,提供了代码生成和其他运行时runtime组件所需的特定于目标的低级接口. ...

  2. 如何在GPU上优化卷积

    本文将演示如何在TVM中编写高性能的卷积实现.以平方大小的输入张量和滤波器为例,并假设卷积的输入量很大.使用不同的布局来存储数据,以实现更好的数据局部性.缓冲区布局为HWCN,代表高度,宽度,通道,批 ...

  3. JUC 并发编程--09, 阻塞队列: DelayQueue, PriorityBlockingQueue ,SynchronousQueue, 定时任务线程池: ScheduledThreadPoolExecutor

    先看DelayQueue 这个是用优先级队列实现的无界限的延迟队列,直接上代码: /** * 这个是 {@link DelayQueue} 延时队列 的验证使用类 */ class MyDelayed ...

  4. jmeter--JSON Extractor 用法

    JMeter处理大部分请求返回的结果,都是json.对于请求返回的结果,处理以后作为其他请求的参数,有一个方便使用的插件:JSON Extractor JSON Extractor中文叫做json提取 ...

  5. 【NX二次开发】开发环境搭建

    1.Visual Studio 版本按照下表选择. UG版本 VS版本 NX1847-NX1872版 Visual Studio 2017 Build 19.10.25017 NX12版 Visual ...

  6. day20200912

    连杆通过运动副相对于啮合连杆运动 ! 运动副: 旋转副:仅旋转 滑动副:仅沿直线滑动 柱面副:可旋转可沿直线滑动 其他: 可以设置上限.下限 3D接触 驱动: 简谐驱动 函数驱动 运动函数驱动

  7. Django基础之路由层

    内容概要 路由匹配 无名有名分组 反向解析 无名有名分组反向解析(难理解) 路由分发 名称空间 伪静态 内容详细 1 路由匹配 urls.py url()方法第一个参数其实是一个正则表达式 第一个参数 ...

  8. opencv——import导包出现错误

    原因:编辑器找不到,CV2的模块,也就是导入这个模块失败: 原因可能是sublime找不到这个这个模块的位置,不知道这个包在哪里,这时候需要我们安装OpenCV的一个扩展包. 解决步骤: ①:找到py ...

  9. vue项目中一些标签直接放在<template>下会报错Failed to compile with 1 errors

    原因是a标签button以及element-ui的组件不能直接放在<template>下,需要先有一个div,其他标签要放在div下

  10. Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回

    前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...