个人作业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 秒钟的时间)
然后自己后面学会的话,后续会再改进和补充