zoukankan      html  css  js  c++  java
  • 课堂测试总结-数组(二)

      在上次测试基础上,建民老师给我们讲美国航天飞机因一个内存不足的问题而导致失事,它的原因就是之前无数次测试而导致内存不断变小,最后失事。

    这次我们在txt文件里输入整数,来存入数组,求得最大子数组。之后产生随机数往txt文件中添加一亿个千万级的数,最后导致电脑内存不足。

    代码如下:

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;

    public class shuzu2 {
    public static void main(String[] args)throws IOException
    {
    List<Integer> list=new ArrayList<>();
    Scanner scan=new Scanner(System.in);
    int x=1;
    while(x!=0)
    {
    System.out.println("请执行操作:1、普通数组求最大子数组 2、百万数组求最大子数组 0、退出");
    x=scan.nextInt();
    if(x==1)
    {
    try {
    File file = new File("shuzu.txt");
    if(file.isFile() && file.exists()) {
    InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
    BufferedReader br = new BufferedReader(isr);
    String lineTxt = "";
    while ((lineTxt = br.readLine()) != null){
    list.add(Integer.parseInt(lineTxt));
    }
    Object[]a=list.toArray();
    System.out.println((int)a[1]+(int)a[3]);
    br.close();
    int sum=a.length;
    int sum1=0;
    for(int i=1;i<=sum;i++)
    {
    sum1=sum1+i;
    }
    int [] b=new int[sum1];
    int temp1=0;
    for(int i=0;i<sum;i++)
    {
    int temp=0;
    for(int k=0;k<sum-i;k++)
    {
    temp=temp+(int)a[i+k];
    b[temp1]=temp;
    temp1++;
    }
    }
    for(int i=0;i<sum1-1;i++)
    for(int k=0;k<sum1-1-i;k++)
    {
    if(b[k]<b[k+1])
    {
    int temp2=b[k];
    b[k]=b[k+1];
    b[k+1]=temp2;
    }
    }
    System.out.println("最大的子数组和为"+b[0]);
    } else {
    System.out.println("文件不存在!");
    }
    } catch (Exception e) {
    System.out.println("文件读取错误!");
    }
    }
    if(x==2)
    {
    FileWriter fw = null;
    try {
    //创建字符输出流
    fw = new FileWriter("shuzu1.txt");
    for(int i=0;i<50;i++)
    {
    int intval=(int)(Math.random()*-9000000+8999999);
    fw.write(""+intval+" ");
    }
    } catch (IOException ioe) {
    ioe.printStackTrace();
    } finally {
    //使用finally块来关闭文件输出流
    if (fw != null) {
    fw.close();
    }
    }
    try {
    File file = new File("shuzu1.txt");
    if(file.isFile() && file.exists()) {
    InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
    BufferedReader br = new BufferedReader(isr);
    String lineTxt = "";
    while ((lineTxt = br.readLine()) != null){
    list.add(Integer.parseInt(lineTxt));
    }
    Object[]a=list.toArray();
    System.out.println((int)a[1]+(int)a[3]);
    br.close();
    int sum=a.length;
    int sum1=0;
    for(int i=1;i<=sum;i++)
    {
    sum1=sum1+i;
    }
    int [] b=new int[sum1];
    int temp1=0;
    for(int i=0;i<sum;i++)
    {
    int temp=0;
    for(int k=0;k<sum-i;k++)
    {
    temp=temp+(int)a[i+k];
    b[temp1]=temp;
    temp1++;
    }
    }
    for(int i=0;i<sum1-1;i++)
    for(int k=0;k<sum1-1-i;k++)
    {
    if(b[k]<b[k+1])
    {
    int temp2=b[k];
    b[k]=b[k+1];
    b[k+1]=temp2;
    }
    }
    System.out.println("最大的子数组和为"+b[0]);
    } else {
    System.out.println("文件不存在!");
    }
    } catch (Exception e) {
    System.out.println("文件读取错误!");
    }
    }
    }
    if(x==0)
    {
    System.out.println("已退出。");
    }
    }

    }

    在这里我只生成了50个千万级的数。没有弄一个亿,可能对电脑有损坏所以没有尝试。

    总结:这次测试让我明白了,作为程序员一定要让自己的程序不能存在任何BUG。

  • 相关阅读:
    线性回归 r python 比较
    vps
    插桩 inline hook 动态二进制插桩的原理和基本实现过程
    duration of lease 1 0.5 0.875 DHCP 租借时间 续租时间 重新绑定时间
    单页应用 cookies处理
    websocket 无需通过轮询服务器的方式以获得响应 同步在线用户数 上线下线 抓包 3-way-handshake web-linux-shell 开发
    code_action
    mysql 表级锁
    mysql 表级锁
    块级标签和行级标签
  • 原文地址:https://www.cnblogs.com/jccjcc/p/10542086.html
Copyright © 2011-2022 走看看