zoukankan      html  css  js  c++  java
  • 最大子数组——回调

    在之前的代码基础上增加新的功能,实现单步显示,数据回滚

    使用switch语句进行输入判断。选择直接运行结束或者单步运行

    单步执行中再加入switch进行选择选择回滚,并输入回滚位置,使用新的for循环获取回滚位置的数据,max1和sum1,并进行判断然后输出。

    package shuzu;
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Scanner;
    public class Test {
        public static void main(String[] args) throws IOException {
            Scanner sc = new Scanner(System.in);
            try{
                FileWriter fw =new FileWriter("a.txt");
            //随机数
            for(int i=0;i<100;i++) {
                long x=(long)(Math.random()*100)*(Math.random()>0.5?1:-1);
                String y=""+x;
                fw.write(y);
                fw.write("
    ");
               // System.out.println(y);
            }
            fw.close();}
            catch(FileNotFoundException e){
                e.printStackTrace();
            }
    
            ArrayList<String> arrList = new ArrayList<>();
            try {
                FileReader fr = new FileReader("a.txt");
                BufferedReader bf = new BufferedReader(fr);
                String st;
                while ((st = bf.readLine()) != null) {
                    arrList.add(st);
                }
                bf.close();
                fr.close();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        long a[] = new long[arrList.size()];
        for (int i = 0; i <arrList.size(); i++) {
            //数组转移
            String s=arrList.get(i);
            a[i] = (long) Double.parseDouble(s);
            }
        
        long max=a[0];
        long sum=a[0];
        
        System.out.println("1.直接执行 2.单步执行");
        int m=sc.nextInt(); 
        switch(m) {
        case 1:{
            for(int i=1;i<a.length;i++) {
                if(sum<0)
                    sum=a[i];
                else 
                    sum+=a[i];
                if(sum>max)    max=sum;
                System.out.print("当前子数组和最大值为"+max);
                System.out.println("当前检查到第"+(i+1)+"位");  
                System.out.println();
            }
            System.out.println("最大子数组和:"+max);
            }break;
        case 2:
        {
            for(int i=1;i<=a.length;i++) {
                if(sum<0)
                    sum=a[i];
                else 
                    sum+=a[i];
                if(sum>max)    max=sum;
                System.out.print("当前子数组和最大值为"+max);
                System.out.println("当前检查到第"+i+"位");
                System.out.println();
                System.out.println("1.继续2.回滚");
                int n = sc.nextInt();  
                switch(n) {
                case 1:break;
                case 2:{
                     long max1=a[0];
                     long sum1=a[0];
                    System.out.println("输入位数");
                    int j=sc.nextInt();
                    for(int k=1;k<=j;k++) {
                        if(sum1<0)
                            sum1=a[k];
                        else 
                            sum1+=a[k];
                        if(sum1>max1)    max1=sum1;
                }
                    System.out.print("当前子数组和最大值为"+max1);
                    System.out.println("当前检查到第"+j+"位");
                }break;
            }
            }System.out.println("最大子数组和:"+max);
        }
       }
      }
    }
  • 相关阅读:
    第4章 排序
    第5章 算术与代数
    第6章 组合数学
    第7章 数论
    第8章 回溯法
    第9章 图遍历
    第11章 动态规划
    第10章 图算法
    第12章 网格
    第13章 几何
  • 原文地址:https://www.cnblogs.com/lixv2018/p/10771137.html
Copyright © 2011-2022 走看看