zoukankan      html  css  js  c++  java
  • 课堂作业

    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]);
    			}
    		}
    		
    	}
    	
    
    }
    

      效果截图:

  • 相关阅读:
    JID 2.0 RC4 发布,高性能的 Java 序列化库
    FBReaderJ 1.6.3 发布,Android 电子书阅读器
    Arquillian 1.0.3.Final 发布,单元测试框架
    JavaScript 的宏扩展 Sweet.js
    Hypertable 0.9.6.5 发布,分布式数据库
    JRuby 1.7.0 发布,默认使用 Ruby 1.9 模式
    httppp 1.4.0 发布,HTTP响应时间监控
    Redis 2.6.0 正式版发布,高性能K/V服务器
    OfficeFloor 2.5.0 发布,IoC 框架
    XWiki 4.3 首个里程碑发布
  • 原文地址:https://www.cnblogs.com/1gaoyu/p/10770162.html
Copyright © 2011-2022 走看看