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。

  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/jccjcc/p/10542086.html
Copyright © 2011-2022 走看看