• 课堂作业


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

    2 按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间) 3. 最好有一个 倒带 / 回滚 的键, 让用户可以看清楚关键的几步。

    设计思路:

    首先就是利用之前写好的一维数组,在数组中记录每个最大子数组的起始位置和终止位置,然后就是统计数组中经历过得最大子数组的个数,然后就是定义一个字符串数组,将所有结果存入到字符串数组中,然后写一个方法判断是否需要进行单步调试,是否需要进行回滚,回滚到相应的位置,其实在此方法中主要就是进行判断然后调用字符串数组

    package test;
    
    import java.util.Scanner;
    
    
    /*
     * 求子数组的最大值
     */
    public class shuzu {
    	static String[] shu = new String[100];
    	static Scanner in = new Scanner(System.in);
    	static int n;
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		int num[] = new int[100];
    		
    		int st,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();
    		}
    		st = 0;
    		sum = num[0];
    		
    		
    		
    		for(int i = 0;i < n;i++)
    		{
    			if (value <= 0) {
    				value = num[i];   //当用于记录的值小于等于0时就无需对其进行相加了,此时就等于下一个值
    				st = i;
    				end ++;
    				a++;
    			}else {
    				value += num[i];  //当value的值仍大于0时就继续相加
    				end ++;
    				
    			}
    			
    			
    			
    			if (sum < value) {    //用sum等于子数组的最大值,若value的值大于sum的值,则将value赋值给sum
    				sum = value;
    				shu[i] = "第" + (i+1) + "步:" +"此时的最大子数组为" + sum + "从"+ (st+1) + "到" + end  + "已经计算了"  + a + "个子数组" ;
    				
    			}else {
    				shu[i] = "第" + (i+1) + "步:" +"此时的最大子数组为" + sum + "从"+ (st+1) + "到" + end  +"已经计算了"  + a + "个子数组";
    
    			}
    			
    		}
    		done();
    		System.out.println("最大值为" + sum);
    		
    	}
    	
    	public static void done()
    	{
    		int stop,k;
    		System.out.println("是否执行但不调试,单步调试请1,");
    		stop = in.nextInt();
    		if (stop != 1) {
    			for(int i = 0 ; i < n ; i++)
    			{
    				System.out.println(shu[i]);
    			}
    		}
    		else {
    			for(int i = 0 ; i < n ; i++)
    			{
    				System.out.println("继续执行请按1");
    				stop = in.nextInt();
    				if (stop == 1) {
    					System.out.println(shu[i]);
    					continue;
    				}
    				
    			}
    		}
    		int choice = 0;
    		
    		
    		while(choice != 1)
    		{
    			System.out.println("是否需要回滚,回滚请按0");
    			choice = in.nextInt();
    			if (choice == 0) {
    				System.out.println("请输入需要回滚到的步数");
    				k = in.nextInt();
    				System.out.println(shu[k-1]);
    			}
    		}
    		
    	}
    	
    
    }
    

      效果截图:

  • 相关阅读:
    单链表
    顺序表
    关于传输协议的简单了解
    URL/URI/URN
    点击图片弹出轮播图 -- 插件
    nodeJs中系统模块的常用方法和自定义模块暴露
    Buffer
    Sublime Text 3 安装Package Control
    npm的简单使用
    scrollTop()和document.body.scrollTop的区别
  • 原文地址:https://www.cnblogs.com/1gaoyu/p/10770162.html
Copyright © 2020-2023  润新知