zoukankan      html  css  js  c++  java
  • 个人作业2-数组续

    题目要求:

    1.要求数组从文件读取。
    2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出

    设计思路:经过上次的从控制台读取数组,这次改为从文本文件读取,并且要求个数多,且单体数值大,那么设计思路就是首先创建一个文件,然后通过random去创建随机数,并存入文件,然后通过file函数读取文件中的数组并赋值给array数组,后面经过循环读取出子数组的和的最大值

    package 数组续集;
    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 shuzu {
        public static void main(String[] args)throws IOException
        {
            List<Integer> list=new ArrayList<>();
            Scanner scan=new Scanner(System.in);
            System.out.println("请执行操作:1、普通数组求最大子数组       2、百万数组求最大子数组");
            int x=scan.nextInt();
            if(x==1)
            {
             try {
                    File file = new File("C:\Users\LJM\Desktop\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("C:\Users\LJM\Desktop\shuzu1.txt");
                        for(int i=0;i<1000;i++)
                        {
                            int intval=(int)((Math.random()*100000000)-50000000);
                        fw.write(""+intval+"
    ");
                        }
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    } finally {
                        //使用finally块来关闭文件输出流
                        if (fw != null) {
                            fw.close();
                        }
                    }
                  try {
                        File file = new File("C:\Users\LJM\Desktop\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("文件读取错误!");
                      }
            }
                  }
    }

    结果截图:

    个人反思:对于这个程序,首先我能懂算法,以及思路,但是就是语法不会用,就是在网上查语法然后连接不到一起,就不能用,可以如果我看别人的程序,可以看懂,每次一点点积累语法,这次学会了file这个读取,虽然说我自己写还是写不出来,但是我找到这个语法至少会用了,还有我知道了定义一个未知的数组用array,还有一点数组的知识,但是只是浅显的一点,虽然学的不多,但是累计起来一定可以的。

  • 相关阅读:
    dlib库+vs2017详细配置流程
    【网易云课堂】【中科院团队】深度学习:算法到实战——神经网络基础
    【网易云课堂】【中科院团队】深度学习:算法到实战——绪论
    matlab 读取多行txt文本
    LeetCode 228. Summary Ranges【未加入列表】
    LeetCode 438. Find All Anagrams in a String
    c++冷知识
    python项目实战——西游记用字统计
    LeetCode 101. Symmetric Tree
    LeetCode 63. Unique Paths II
  • 原文地址:https://www.cnblogs.com/ljm-zsy/p/10547822.html
Copyright © 2011-2022 走看看