• 一位数组续


    设计并实现一个系统,让一个普通用户就能通过单步执行的方式看到你的算法是如何工作的。

    1.1用户也可以自行定义数组的大小

    2.1按单步执行键,在GUI看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。最好用不同的颜色标识不同的状态。

    2.2按自动运行键,在GUI看到程序自动运行,并自动显示过程,每次改变状态的时候要稍作停留

    3.最好有一个倒带/回滚的键,让用户可以看清楚关键的几步

    设计思路:
    设计一个字符串数组来储存当前最大子数组,设置两个变量来计算当前最大子数组的位置。之后创建一个函数来实现功能

    代码:

    import java.util.Scanner;
    
    
    /*
     * 求子数组的最大值
     */
    public class shuzu {
        static int n;
        static String[] Result = new String[100];
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            int num[] = new int[100];
            Scanner in = new Scanner(System.in);
            
            
            int start,end = 0;
            int a=0;
            
            int sum = 0;
            int value = 0;
            
            System.out.println("输入数组的个数");
            n = in.nextInt();
            System.out.println("输入数组中的值");
            for(int i = 0;i < n;i++)
            {
                num[i] = in.nextInt();
            }
            start = 0;
            sum = num[0];
            
            
            
            for(int i = 0;i < n;i++)
            {
                if (value <= 0) {
                    value = num[i]; 
                    start = i;
                    end ++;
                    a++;
                }else {
                    value += num[i]; 
                    end ++;
                    
                }
                
                
                
                if (sum < value) {    
                    sum = value;
                    Result[i] = "第" + (i+1) + "步:" +"此时的最大子数组为" + sum + "从"+ (start+1) + "到" + end  + "已经计算了"  + a + "个子数组" ;
                    
                }else {
                    Result[i] = "第" + (i+1) + "步:" +"此时的最大子数组为" + sum + "从"+ (start+1) + "到" + end  +"已经计算了"  + a + "个子数组";
    
                }
                
            }
            done();
            System.out.println("最大值为" + sum);
            
        }
        
        public static void done()
        {
            int stop,k;
            Scanner in = new Scanner(System.in);
            System.out.println("单步调试请按1");
            stop = in.nextInt();
            if (stop != 1) {
                for(int i = 0 ; i < n ; i++)
                {
                    System.out.println(Result[i]);
                }
            }
            else {
                for(int i = 0 ; i < n ; i++)
                {
                    System.out.println("继续执行请按1");
                    stop = in.nextInt();
                    if (stop == 1) {
                        System.out.println(Result[i]);
                        continue;
                    }
                    
                }
            }
            int choice = 0;
            
            
            while(choice != 1)
            {
                System.out.println("是否需要回滚,回滚请按0");
                choice = in.nextInt();
                if (choice == 0) {
                    System.out.println("请输入需要回滚到的步数");
                    k = in.nextInt();
                    for(int t=k-1;t<n;t++)
                    {
                    System.out.println(Result[t]);
                    }
                }
            }
            
        }
        
    
    }

    实验截图:

  • 相关阅读:
    利用window.onerror收集js代码异常
    js 基础题复习
    正则12和\1的理解
    CodeReview 方法 规范
    前端的登陆 几种类型
    http协议相关知识
    javascript中apply、call和bind的区别 详细易懂
    http常见的状态码,400,401,403 前端看
    vue中使用file-saver 下载各类文件
    js下载文件到本地各种方法总结
  • 原文地址:https://www.cnblogs.com/liujinxin123/p/10770355.html
Copyright © 2020-2023  润新知