新情况:

  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)相关推荐

  1. C语言博客作业--字符数组

    一.PTA实验作业 题目1:统计一行文本的单词个数 1. 本题PTA提交列表 2. 设计思路 Begin定义字符型变量ch,pre=' ': 定义整型变量count://用来记录单词个数 count← ...

  2. 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 数组 ...

  3. 厦大2021届大一小学期C语言作业1 数组+字符串+指针+位操作

    文章目录 一.数组与指针 1.手搓冒泡排序(从大到小) 2.矩阵的转置和打印 3.判断矩阵是否对称 4.最大元素与最后元素互换(用指针) 5.首地址偏移法逆序排序 6.指针移动法逆序排序 7.用元素指 ...

  4. 第二次上机作业 (数组综合)

    1.已知一个矩阵,存储在一个二维数组中.将矩阵中和值为最大的那一行元素与首行对换. #include<iostream> using namespace std;void swap(int ...

  5. 绝对零基础的C语言科班作业⑦(数组)(斐波那契数列)(冒泡排序)

    一(一维数组) ①(代码)反序输出 任务描述 编程读入若干整数,按相反顺序输出. 输入格式: 第一行是一个整数N(N<=100),表示这一组数据的个数.接下来的一行是N个整数,用空格或回车分隔. ...

  6. EHPC通过断点续算和自动伸缩在抢占式实例上实现低成本HPC计算

    摘要: E-HPC 低成本计算方案 E-HPC作为阿里云上的云超算产品将HPCaaS公共云服务提供给客户,将公共云上资源弹性优势,高性能的优势,计算资源的多样性等优势提供给HPC用户,如果HPC用户追 ...

  7. 彻底掌握 Javascript(九)数组【讲师辅导】-曾亮-专题视频课程

    彻底掌握 Javascript(九)数组[讲师辅导]-1039人已学习 课程介绍         javascript 数组也是一个对象,它不属于基础类型,在javascript中,数组非常灵活,而且 ...

  8. UJN_DS实验和作业(仅供参考)

    UJN_DS实验和作业(仅供参考) 作业1 线性表的应用 将顺序表中保存的序列循环左移p个位置 [问题描述]设将n(n>1)个整数存放到一维数组R中.试设计一个在时间和空间两方面都尽可能高效的算 ...

  9. c语言第七章作业,C语言学习第七章

    今天开始学习指针,指针在C语言中具有很重要的地位,按照老师所说,学C学不好指针跟没学一样,可见指针在C语言中的重要地位.废话不多说,首先我们先要知道什么是指针. 指针:指针是一个变量,它存储另一个对象 ...

  10. 2019春季学期期末总结

    2019春季学期期末总结作业 一.我学到的内容 二.我的收获 作业连接 收获 第二周作业 文件的建立 第三周作业 二维数组 第四周作业 选择排序法 第五周作业 字符串数组 第六周作业 指针 第七周作业 ...

最新文章

  1. sencha touch中实现页面之间的互相跳转
  2. avue 文字点击 弹窗_经验 | UI设计师必懂的App弹窗设计方法
  3. 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
  4. 从零开始学习C# 2
  5. framework2.0和1.1一样,怎么办
  6. 世界上有条件JavaScript是什么?
  7. 随想录(kernel的版本管理)
  8. SQOOP抽取各类型数据库脚本示例
  9. python 命令行运行 多进程_Python初学——多进程Multiprocessing
  10. 《模拟电子技术》–童诗白
  11. Matlab线型、标记、颜色表示代码
  12. 五子棋等级考试软件的开发(五)
  13. Unity3D之FingerGestures使用
  14. 一个公布每天全球被黑网站的站点
  15. 嵌入式软件开发之常用软件(六)
  16. 微信公众平台开发【发送消息】被动回复消息
  17. 十分钟了解绘图神器——Graphviz学习笔记
  18. 数字化转型中基于交付价值数据治理的6大原则
  19. Android 在APP内打开指定的QQ、QQ群
  20. JavaScript贷款计算器

热门文章

  1. 九背包上的发言稿_01背包
  2. 使用 Castle ActiveRecord
  3. 用c语言实现对n个进程采用“短进程优先”算法的进程调度_为什么Linux CFS调度器没有带来惊艳的碾压效果?...
  4. 3d旋转相册代码源码_原生 JS 实现 3D 立方体
  5. Mysql商品和图片表_【mysql】数据库设计模式:多个图片怎么和商品关联
  6. 机器人学习--电子指南针定位导航
  7. SLAM学习--帝国理工学院机器人课程slam部分讲义(附下载链接)
  8. TensorFlow | TensorFlow实践(一)
  9. c语文编程提取郑码的单字码表
  10. android 测试网,Android Monkey测试