日期:2019.3.15

博客期:047

星期五

  上一回我们知道将数组的连续子数组的最大和的求法,我们知道应该对它以软件工程的思想进行优化,也就是bug修复和用户体验优化等(因为这两部分是今天要实现的,所以要提一下)。

  我给出的优化是:

  1、将数据改为从文件读入,免去用户控制台输入的操作

  2、将文件的数据内容改为随机数存储,这样用户也可以不用管理数据。

  3、处理一系列的错误抛出,如:读入Integer的范围、算法计算过程中的Integer范围(这个是老师提醒的,之前没有注意到,今后要加倍注意)、文件不存在、文件内部没有数据、文件数据中存在非数字的内容。

  4、超过Integer范围的数字需要保留下来

  5、实现更多功能?不仅仅是最大值?

  

  所以,进行了修理:

  (一)、将数据改为从文件读入,免去用户控制台输入的操作

    复习与文件相关的知识点:

    File PrintWriter Scanner

  (二)、将文件的数据内容改为随机数存储,这样用户也可以不用管理数据。

    复习生成随机数的相关知识点:

    Random System

  (三)、处理一系列的错误抛出,如:读入Integer的范围、算法计算过程中的Integer范围(这个是老师提醒的,之前没有注意到,今后要加倍注意)、文件不存在、文件内部没有数据、文件数据中存在非数字的内容。

    使用try catch语句处理Exception

  (四)、超过Integer范围的数字需要保留下来

    处理Number相关Exception

  (五)、实现更多功能?不仅仅是最大值?

    比如再求出数组是从第i个开始的,到哪里结束的。

  

  

  

  

  1 package pvp;
  2
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.math.BigInteger;
  6 import java.util.Scanner;
  7
  8 public class TestPlay {
  9     public static void main(String[] args) {
 10         //AddRandomNumber.Renew2();
 11         File f = new File("data/data.txt");
 12         if(!f.exists())
 13         {
 14             System.out.println("文件不存在!");
 15             System.exit(0);
 16         }
 17         //存储导入内容
 18         String str;
 19         //内容
 20         Scanner sc = null;
 21         try {
 22             sc = new Scanner(f);
 23         } catch (FileNotFoundException e1) {
 24             System.out.println("文件不存在!");
 25             System.exit(0);
 26         }
 27         //最大值
 28         BigInteger rmax = new BigInteger("0");
 29         //正数总值
 30         BigInteger Tnum = new BigInteger("0");
 31         //负数总值
 32         BigInteger Fnum = new BigInteger("0");
 33         //记录是否发生转变
 34         int sis = 0;
 35         //标记是第几程度
 36         int attitude = 0;
 37         //循环
 38         try
 39         {
 40             if(!sc.hasNext())
 41             {
 42                 System.out.println("文件内容为空!");
 43                 System.exit(0);
 44             }
 45             while(sc.hasNext())
 46             {
 47                 str = sc.next();
 48                 BigInteger p = new BigInteger(str);
 49                 if(attitude==0)                    //---------------------------------------[寻找第一个正数]
 50                 {
 51                     if(p.compareTo(new BigInteger("0"))<=0)
 52                         ;
 53                     else
 54                     {
 55                         Tnum = p;
 56                         attitude = 1;
 57                     }
 58                 }
 59                 else if(attitude==1)            //---------------------------------------[上一个数为正数]
 60                 {
 61                     if(p.compareTo(new BigInteger("0"))<0)
 62                     {
 63                         if(sis==0)
 64                         {
 65                             sis = 1;
 66                             Fnum.add(p);
 67                         }
 68                         else
 69                             Fnum = p;
 70                         attitude = -1;
 71                     }
 72                     else
 73                         Tnum = Tnum.add(p);
 74
 75                     if(Tnum.compareTo(rmax)>0)
 76                         rmax = Tnum;
 77                 }
 78                 else                            //---------------------------------------[上一个数为负数]
 79                 {
 80                     if(p.compareTo(new BigInteger("0"))>0)
 81                     {
 82                         attitude = 1;
 83                         if(Tnum.compareTo(new BigInteger("0").subtract(Fnum))>0)
 84                         {
 85
 86                             Tnum = Tnum.add(Fnum).add(p);
 87                         }
 88                         else
 89                             Tnum = p;
 90                     }
 91                     else
 92                     {
 93                         Fnum = Fnum.add(p);
 94                     }
 95                 }
 96                 if(p.compareTo(rmax)>0)
 97                     rmax = p;
 98                 if(p.compareTo(Tnum)>0)
 99                     rmax = Tnum;
100             }
101         }
102         catch( NumberFormatException e){
103             System.out.println("输入内容不是数字!");
104             System.exit(0);
105         }
106         System.out.println(rmax);
107         sc.close();
108     }
109 }

TextPlay.java

  1 package pvp;
  2
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.util.Scanner;
  6
  7 public class TestPlay2 {
  8     public static void main(String[] args) {
  9         AddRandomNumber.Renew();
 10         File f = new File("data/data.txt");
 11         if(!f.exists())
 12         {
 13             System.out.println("文件不存在!");
 14             System.exit(0);
 15         }
 16         //存储导入内容
 17         String str;
 18         //内容
 19         Scanner sc = null;
 20         try {
 21             sc = new Scanner(f);
 22         } catch (FileNotFoundException e1) {
 23             System.out.println("文件不存在!");
 24             System.exit(0);
 25         }
 26         //最大值
 27         int rmax = Integer.MIN_VALUE;
 28         //正数总值
 29         int Tnum = Integer.MAX_VALUE;
 30         //负数总值
 31         int Fnum = 0;
 32         //记录是否发生转变
 33         int sis = 0;
 34         //标记是第几程度
 35         int attitude = 0;
 36         //循环
 37         try
 38         {
 39             if(!sc.hasNext())
 40             {
 41                 System.out.println("文件内容为空!");
 42                 System.exit(0);
 43             }
 44             while(sc.hasNext())
 45             {
 46                 int p;
 47                 str = sc.next();
 48                 p = Integer.parseInt(str);
 49                 if(attitude==0)                    //---------------------------------------[寻找第一个正数]
 50                 {
 51                     if(p<=0)
 52                         ;
 53                     else
 54                     {
 55                         Tnum = p;
 56                         attitude = 1;
 57                     }
 58                 }
 59                 else if(attitude==1)            //---------------------------------------[上一个数为正数]
 60                 {
 61                     if(p<0)
 62                     {
 63                         if(sis==0)
 64                         {
 65                             sis = 1;
 66                             Fnum += p;
 67                         }
 68                         else
 69                             Fnum = p;
 70                         attitude = -1;
 71                     }
 72                     else
 73                         Tnum += p;
 74
 75                     if(Tnum>rmax)
 76                         rmax = Tnum;
 77                 }
 78                 else                            //---------------------------------------[上一个数为负数]
 79                 {
 80                     if(p>0)
 81                     {
 82                         attitude = 1;
 83                         if(Tnum + Fnum > 0)
 84                         {
 85                             if(Tnum + Fnum > Integer.MAX_VALUE - p)
 86                             {
 87                                 System.out.println("统计内容超过最大值!");
 88                                 System.exit(0);
 89                             }
 90                             Tnum = (Tnum + Fnum) + p;
 91                         }
 92                         else
 93                             Tnum = p;
 94                     }
 95                     else
 96                     {
 97                         if(Fnum<Integer.MIN_VALUE-p)
 98                         {
 99                             System.out.println("统计内容超过最小值!");
100                             System.exit(0);
101                         }
102                         Fnum += p;
103                     }
104                 }
105                 if(p>rmax)
106                     rmax = p;
107                 if(Tnum>rmax)
108                     rmax = Tnum;
109
110             }
111         }
112         catch( NumberFormatException e){
113             System.out.println("输入内容不是数字或者过大!");
114             System.exit(0);
115         }
116         System.out.println(rmax);
117         sc.close();
118     }
119 }

TextPlay2.java

 1 package pvp;
 2
 3 import java.io.File;
 4 import java.io.FileNotFoundException;
 5 import java.io.IOException;
 6 import java.io.PrintWriter;
 7 import java.util.Random;
 8
 9 public class AddRandomNumber {
10     public static void main(String[] args) {
11         System.out.println(Integer.MAX_VALUE);
12         System.out.println(Integer.MIN_VALUE);
13     }
14     public static void Renew2(){
15         File f = new File("data/data.txt");
16         if(!f.exists())
17         {
18             try {
19                 f.createNewFile();
20             } catch (IOException e) {
21                 //Do Nothing...
22             }
23         }
24         PrintWriter pw = null;
25         try {
26             pw = new PrintWriter(f);
27         } catch (FileNotFoundException e) {
28             System.out.println("文件不存在!");
29             System.exit(0);
30         }
31         Random ra = new Random(System.currentTimeMillis());
32         for(long i=0;i<1437824721;++i)
33         {
34             long p = ra.nextLong();
35
36             pw.println(p);
37         }
38         pw.close();
39     }
40     public static void Renew(){
41         File f = new File("data/data.txt");
42         if(!f.exists())
43         {
44             try {
45                 f.createNewFile();
46             } catch (IOException e) {
47                 //Do Nothing...
48             }
49         }
50         PrintWriter pw = null;
51         try {
52             pw = new PrintWriter(f);
53         } catch (FileNotFoundException e) {
54             System.out.println("文件不存在!");
55             System.exit(0);
56         }
57         Random ra = new Random(System.currentTimeMillis());
58         for(int i=0;i<4378247;++i)
59         {
60             int p = ra.nextInt();
61             p = p %100;
62             p = p + 50;
63             pw.println(p);
64         }
65         pw.close();
66     }
67 }

AddRandomNumber.java

转载于:https://www.cnblogs.com/onepersonwholive/p/10534748.html

关于求已知整数数组的连续子数组的最大和的方法 ——基于软件工程的要求给予优化...相关推荐

  1. 关于求已知整数数组的连续子数组的最大和的方法 ——基于一维数组的循环,甚至推广到二维情况上...

    日期:2019.3.21 博客期:049 星期四 先二话不说,先交代码,今天训练的内容是"这个整数数组是允许开头和结尾结合在一起的",大家的思路都是扩大数组内容,就是将读入的数据存 ...

  2. 结对开发项目:求整数数组中连续子数组和的最大值

    小组成员:安娜 王鑫楠 题目二:求整数数组中连续子数组和的最大值. 1.分析过程: 题目收到后,前五分钟设计算法,首先也想到是不是一次遍历可以解决,考虑了一下觉得难度有点大最后还是果断放弃.我刚开始的 ...

  3. 数组的连续子数组最大和(首尾相连)

    题目: 求一个循环数组的连续子数组的最大和. 解法: <编程之美>上给出一种方法: 1)求[0, n-1]的最大和: 2)如果跨过了n-1,则计算以n-1为尾部的最大子数组[i, n-1] ...

  4. 线性dp:DP9 环形数组的连续子数组最大和

    描述 给定一个长度为 n 的环形整数数组,请你求出该数组的 非空连续子数组 的最大可能和 . 环形数组 意味着数组的末端将会与开头相连呈环状.例如,对于数组 [1,3,-5,2,-4]而言,第一个数  ...

  5. 返回一个二维整数数组最大联通子数组的和(思路)

    返回一个二维整数数组最大联通子数组的和(思路) 题目: 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 总体思路: 返回一个最大的二维联通子数组的思路总体上和二维首尾子数组相 ...

  6. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  7. 连续子数组的最大和python_连续子数组的最大和

    题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求元素和值最大的那个子数组的和值. C#实现:public static int FindGreatestSum ...

  8. [剑指offer]面试题31:连续子数组的最大和

    面试题31:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). ❖ 解法一:举例分析数组的 ...

  9. 算法题解:连续子数组的最大和及其下标

    题目 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). 举例 输入:2, -3, 4, 5, -9 输出:9 和最 ...

  10. 剑指Offer面试题:28.连续子数组的最大和

    一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...

最新文章

  1. 会议季Mic Drop:您不应该错过的13场Java演讲
  2. Linux四种共享内存技术(附源码):SystemV、POSIX mmap、memfd_create、dma-buf
  3. 540.有序数组中的单一元素
  4. Windows XP注册表修改精粹
  5. DirectX9:先导篇 图形学基础
  6. 并发编程学习之JDK1.8的ConcurrentHashMap
  7. asp.net网上零食销售商城系统
  8. 推荐几个用于Linux系统的PDF文档查看器
  9. 数据分析师面试题目_数据分析师面试的77个常见问题,你准备好了吗?
  10. 如何挑选微信第三方开发商
  11. latex normal是几号字_Latex之字体 | 学步园
  12. android夏时令问题
  13. Stimulsoft Reports.JS 2022.1.6
  14. 【概率论与数理统计】猴博士 笔记 p38-40 切比雪夫不等式、大数定律、中心极限定理
  15. VSCode查看gltf文件(glTF Tools插件)
  16. TDM和TDMA的经典简述
  17. Ubuntu16.04的图形化界面系统安装+NIVIDIA驱动安装-Cuda-Cudnn+教程全(后面安装系统通用)
  18. Chrome源码剖析、上--多线程模型、进程通信、进程模型
  19. Linux文件解hgc,Linux从实模式到保护模式.pdf
  20. 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK

热门文章

  1. Leetcode之两棵二叉搜索树中的所有元素
  2. 计算机/程序员常用英语(持续添加,包括一些简写)
  3. 十九、Math和Random类
  4. 卡特兰数-两个经典做法
  5. kafka 安装,使用教程
  6. webStorm 修改 JavaScript 版本为 ES6
  7. 小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
  8. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_14_常用的函数式接口_Predicate接口中的默认方法or和negate...
  9. CERC 2017 H:Hidden Hierarchy (模拟)
  10. cnblog之初来乍到