个人作业1-数组(续1)
新情况:
1.要求数组从文件读取。
2.如果输入的数组很大,并且有很多大的数字,就会产生比较大的结果(考虑一下数的溢出),请保持你的程序正常输出。
3.另外,如果输入文件的参数有错误,这个程序应该能正确退出,并显示相应的错误。任何输入错误都不能导致你的程序崩溃。
设计思想:
首先实现文件的输入输出,向文件输入时采取一行一个数的方式输入,这样在取值时可以比较简单,一行一行的取。考虑到数组大小的不确定性,采用容器list从文件中获取数据,同时还可以很好的解决数组过大问题。最后解决数的溢出问题,采用BigInteger解决。最后进行测试,解决一些意外导致的问题。
出现的问题:
1.在使用BigInteger时add()函数出错,数值无法相加。
2.用list容器直接操作时出现了一些错误。
3.每次重新进行操作时新增的内容会出现在旧的内容之下。
解决方法:
1.直接运用maxstart.add(y) 数值不变,所以我创了一个新的BigInteger变量v,让v=maxstart.add(y),发现可以得到相加的结果,之后我让maxstart=v,问题解决。
2.直接使用list容器容易出错,所以我通过for循环将容器中的值一一赋到String数组中。
3.我在程序的末尾加入了文件清空函数。
package shuzuxu;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.*; public class shuzu {public static void main(String[] args) throws Exception{File f = new File("hello.txt");judeFileExists(f);//判断文件是否存在//用FileOutputSteam包装文件,并设置文件可追加OutputStream out = new FileOutputStream(f,true);Scanner in=new Scanner(System.in);System.out.println("请输入产生随机数的数量:");String nums;int n;while(true)//判断输入是否为整数 {try{nums=in.next() ;n=Integer.parseInt(nums) ;break ;}catch(Exception e){System.out.println("只能输入整数") ;}}for(int i=0;i<n;i++){java.util.Random r=new java.util.Random();String s=Integer.toString(r.nextInt());out.write(s.getBytes()); //向文件中写入数据out.write('\r'); // \r\n表示换行out.write('\n'); }List list = new ArrayList();BufferedReader bw = new BufferedReader(new FileReader(f));String line = null;//因为不知道有几行数据,所以先存入list集合中while((line = bw.readLine()) != null){list.add(line);}//bw.close();int a=list.size();String[] li=new String[a];for(int i=0;i<list.size();i++){li[i]=(String) list.get(i);System.out.println(li[i]);}BigInteger maxsum = new BigInteger("0");BigInteger maxstart = new BigInteger("0");//用于判断子数组是否小于0BigInteger x = new BigInteger("0");maxsum = new BigInteger(li[0]);BigInteger y;for(int i = 0;i < list.size();i++){if (maxstart.compareTo(x)!=1) {//忽略掉和为负数和0的子数组maxstart = new BigInteger(li[i]);}else {y= new BigInteger(li[i]);BigInteger v=maxstart.add(y);maxstart=v;}if (maxsum.compareTo(maxstart)<0) {maxsum = maxstart;}}System.out.println("最大值为:" + maxsum);FileWriter fileWriter =new FileWriter(f);fileWriter.flush();fileWriter.close();String line1 = null;if((line1 = bw.readLine()) == null){System.out.println("文件清空成功");;}}public static void judeFileExists(File file) {//判断文件是否存在if (file.exists()) {System.out.println("file exists");} else {System.out.println("file not exists, create it ...");try {file.createNewFile();} catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();}}} }
结果截图:
总结:
目前测试的最大数组为500万,明显运行的非常慢,不过还可以运行,接下来的任务是尽可能优化程序。在第三点,我对输入的数组的数量进行了一次循环判断,如果输入的不是整数则重新输入,之后增加了一个判断文件是否存在的函数,在程序末尾加了判断文件是否为空的if语句,总之通过本次作业,我进行了依次小型的单元测试,也力争让程序变得更完善,之后我会继续修改,争取能变得更好。
转载于:https://www.cnblogs.com/liujinxin123/p/10533709.html
个人作业1-数组(续1)相关推荐
- C语言博客作业--字符数组
一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 Begin定义字符型变量ch,pre=' ': 定义整型变量count://用来记录单词个数 count← ...
- c语言encoder作业字符数组,C语言练习题库----数组
有如下语句int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p = a;则数值为9的表达式是______ *p+9b)*(p+8)c)*p+=9d)p+7 解析:B 数组 ...
- 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作
文章目录 一.数组与指针 1.手搓冒泡排序(从大到小) 2.矩阵的转置和打印 3.判断矩阵是否对称 4.最大元素与最后元素互换(用指针) 5.首地址偏移法逆序排序 6.指针移动法逆序排序 7.用元素指 ...
- 第二次上机作业 (数组综合)
1.已知一个矩阵,存储在一个二维数组中.将矩阵中和值为最大的那一行元素与首行对换. #include<iostream> using namespace std;void swap(int ...
- 绝对零基础的C语言科班作业⑦(数组)(斐波那契数列)(冒泡排序)
一(一维数组) ①(代码)反序输出 任务描述 编程读入若干整数,按相反顺序输出. 输入格式: 第一行是一个整数N(N<=100),表示这一组数据的个数.接下来的一行是N个整数,用空格或回车分隔. ...
- EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算
摘要: E-HPC 低成本计算方案 E-HPC作为阿里云上的云超算产品将HPCaaS公共云服务提供给客户,将公共云上资源弹性优势,高性能的优势,计算资源的多样性等优势提供给HPC用户,如果HPC用户追 ...
- 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程
彻底掌握 Javascript(九)数组[讲师辅导]-1039人已学习 课程介绍 javascript 数组也是一个对象,它不属于基础类型,在javascript中,数组非常灵活,而且 ...
- UJN_DS实验和作业(仅供参考)
UJN_DS实验和作业(仅供参考) 作业1 线性表的应用 将顺序表中保存的序列循环左移p个位置 [问题描述]设将n(n>1)个整数存放到一维数组R中.试设计一个在时间和空间两方面都尽可能高效的算 ...
- c语言第七章作业,C语言学习第七章
今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...
- 2019春季学期期末总结
2019春季学期期末总结作业 一.我学到的内容 二.我的收获 作业连接 收获 第二周作业 文件的建立 第三周作业 二维数组 第四周作业 选择排序法 第五周作业 字符串数组 第六周作业 指针 第七周作业 ...
最新文章
- sencha touch中实现页面之间的互相跳转
- avue 文字点击 弹窗_经验 | UI设计师必懂的App弹窗设计方法
- 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
- 从零开始学习C# 2
- framework2.0和1.1一样,怎么办
- 世界上有条件JavaScript是什么?
- 随想录(kernel的版本管理)
- SQOOP抽取各类型数据库脚本示例
- python 命令行运行 多进程_Python初学——多进程Multiprocessing
- 《模拟电子技术》–童诗白
- Matlab线型、标记、颜色表示代码
- 五子棋等级考试软件的开发(五)
- Unity3D之FingerGestures使用
- 一个公布每天全球被黑网站的站点
- 嵌入式软件开发之常用软件(六)
- 微信公众平台开发【发送消息】被动回复消息
- 十分钟了解绘图神器——Graphviz学习笔记
- 数字化转型中基于交付价值数据治理的6大原则
- Android 在APP内打开指定的QQ、QQ群
- JavaScript贷款计算器
热门文章
- 九背包上的发言稿_01背包
- 使用 Castle ActiveRecord
- 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...
- 3d旋转相册代码源码_原生 JS 实现 3D 立方体
- Mysql商品和图片表_【mysql】数据库设计模式:多个图片怎么和商品关联
- 机器人学习--电子指南针定位导航
- SLAM学习--帝国理工学院机器人课程slam部分讲义(附下载链接)
- TensorFlow | TensorFlow实践(一)
- c语文编程提取郑码的单字码表
- android 测试网,Android Monkey测试