关于求已知整数数组的连续子数组的最大和的方法 ——基于软件工程的要求给予优化...
日期: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
关于求已知整数数组的连续子数组的最大和的方法 ——基于软件工程的要求给予优化...相关推荐
- 关于求已知整数数组的连续子数组的最大和的方法 ——基于一维数组的循环,甚至推广到二维情况上...
日期:2019.3.21 博客期:049 星期四 先二话不说,先交代码,今天训练的内容是"这个整数数组是允许开头和结尾结合在一起的",大家的思路都是扩大数组内容,就是将读入的数据存 ...
- 结对开发项目:求整数数组中连续子数组和的最大值
小组成员:安娜 王鑫楠 题目二:求整数数组中连续子数组和的最大值. 1.分析过程: 题目收到后,前五分钟设计算法,首先也想到是不是一次遍历可以解决,考虑了一下觉得难度有点大最后还是果断放弃.我刚开始的 ...
- 数组的连续子数组最大和(首尾相连)
题目: 求一个循环数组的连续子数组的最大和. 解法: <编程之美>上给出一种方法: 1)求[0, n-1]的最大和: 2)如果跨过了n-1,则计算以n-1为尾部的最大子数组[i, n-1] ...
- 线性dp:DP9 环形数组的连续子数组最大和
描述 给定一个长度为 n 的环形整数数组,请你求出该数组的 非空连续子数组 的最大可能和 . 环形数组 意味着数组的末端将会与开头相连呈环状.例如,对于数组 [1,3,-5,2,-4]而言,第一个数 ...
- 返回一个二维整数数组最大联通子数组的和(思路)
返回一个二维整数数组最大联通子数组的和(思路) 题目: 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 总体思路: 返回一个最大的二维联通子数组的思路总体上和二维首尾子数组相 ...
- 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和
一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...
- 连续子数组的最大和python_连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求元素和值最大的那个子数组的和值. C#实现:public static int FindGreatestSum ...
- [剑指offer]面试题31:连续子数组的最大和
面试题31:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). ❖ 解法一:举例分析数组的 ...
- 算法题解:连续子数组的最大和及其下标
题目 输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n). 举例 输入:2, -3, 4, 5, -9 输出:9 和最 ...
- 剑指Offer面试题:28.连续子数组的最大和
一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...
最新文章
- 会议季Mic Drop:您不应该错过的13场Java演讲
- Linux四种共享内存技术(附源码):SystemV、POSIX mmap、memfd_create、dma-buf
- 540.有序数组中的单一元素
- Windows XP注册表修改精粹
- DirectX9:先导篇 图形学基础
- 并发编程学习之JDK1.8的ConcurrentHashMap
- asp.net网上零食销售商城系统
- 推荐几个用于Linux系统的PDF文档查看器
- 数据分析师面试题目_数据分析师面试的77个常见问题,你准备好了吗?
- 如何挑选微信第三方开发商
- latex normal是几号字_Latex之字体 | 学步园
- android夏时令问题
- Stimulsoft Reports.JS 2022.1.6
- 【概率论与数理统计】猴博士 笔记 p38-40 切比雪夫不等式、大数定律、中心极限定理
- VSCode查看gltf文件(glTF Tools插件)
- TDM和TDMA的经典简述
- Ubuntu16.04的图形化界面系统安装+NIVIDIA驱动安装-Cuda-Cudnn+教程全(后面安装系统通用)
- Chrome源码剖析、上--多线程模型、进程通信、进程模型
- Linux文件解hgc,Linux从实模式到保护模式.pdf
- 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK
热门文章
- Leetcode之两棵二叉搜索树中的所有元素
- 计算机/程序员常用英语(持续添加,包括一些简写)
- 十九、Math和Random类
- 卡特兰数-两个经典做法
- kafka 安装,使用教程
- webStorm 修改 JavaScript 版本为 ES6
- 小D课堂 - 新版本微服务springcloud+Docker教程_3-03CAP原理、常见面试题
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_14_常用的函数式接口_Predicate接口中的默认方法or和negate...
- CERC 2017 H:Hidden Hierarchy (模拟)
- cnblog之初来乍到