个人作业4-用户通过单步执行的方式看到你的算法是如何工作的(之前数组)

在原来数组问题的基础上:

用户这时候有两个选择
2.1  按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。 最好用不同的颜色标识不同的状态。
2.2  按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间)

代码简单实现如下:

package array;

import java.util.Scanner;

import java.io.*;
import java.math.BigDecimal;

public class array1 {

	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入数组的长度");
		int n=sc.nextInt();
		int array[]=new int[n];
		int array2[]=new int[n];
		System.out.println("请依次输入数组的每个值");
		for(int i=0;i<n;i++) {
			 array[i]=sc.nextInt();
		}
		for(int i=0;i<n;i++) {
			array2[i]=0;
		}
		int max;
		int[] array3=new int[2*n-1];
		
		for(int j=0;j<n;j++) {
			array3[j]=array[j];
					}
		for(int i=n;i<2*n-1;i++)
		array3[i]=array[i-n];
		for(int i=0;i<2*n-1;i++) {
			System.out.print(array3[i]+" ");
		}
		/*当前最大子数组,从哪个到哪个,你检查了几个子数组了,还差几个。*/		
		System.out.print("\n");
		int num=0;//数组个数。		
		System.out.println("输入0开始");
		int number=sc.nextInt();
		if(number==0) {
		for(int i=0;i<n;i++) {
			max=array3[i];
			int sum=0;
			//System.out.print("abc"+max+" ");
			int  temp=i;
			//for(int j=i;j<2*n-1;j++) {
			for(int j=i;j<=n-1+i;j++) {
				num++;				
				sum=sum+array3[j];				
			if((max<sum)&&(j-i+1<=n)) {
				temp=j;
				//System.out.println("123"+temp);				
				max=sum;
			}	
			System.out.println("输入0执行下一步");
			int number1=sc.nextInt();
			if(number1==0) {
			System.out.println("当前执行第"+num+"步,当前正在计算第"+num+"个子数组,"+"从数"+array3[i]+"开始,"+"从数"+array3[j]+"结束,"+"当前最大子数组和为"+max+",最大子数组范围"+array3[i]+"到"+array3[temp]);
			}
			else {
				System.out.println("输入有误,程序退出");
				System.exit(0);
			}
			}
							array2[i]=max;	
				//System.out.println("def"+max);
		} 
		}
		else {
			System.out.println("输入有误,程序退出");
			System.exit(0);
		}
		int k=array2[0];
		for(int i=0;i<n;i++) {
			System.out.println("ghi"+array2[i]);
		}
		for(int i=0;i<n;i++) {
			if(array2[i]>k) {
				k=array2[i];
			}
		}
				
		/*1 2 3 4 5 1 2 3 4
		 * n+n-1
		 *6 -7 9 -3 5 
		 * 1 1+n
		 * 2 2+n
		 * 1 2 3 4 1 2 3
		 * 2 3 4 1
		 * 3 4 2 1
		 * */
		System.out.println("最大值"+k);
	}
	}

 截图:

总结:自己只是简单地实现了一个用户通过不断按0键清楚地看到程序执行每一步的过程。

但是并不能同时实现按 单步执行 键(最好用不同的颜色标识不同的状态。没有实现这点儿)和按 自动运行 键(自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间)

然后自己后面学会的话,后续会再改进和补充

posted @ 2019-04-25 19:39  云破月来花弄影  阅读(208)  评论(0编辑  收藏  举报