要求:
1 按 单步执行 键, 在 GUI 看到你的程序是如何一步一步算出目前最大子数组的范围,当前计算到的临时子数组是在哪里,等等。 最好用不同的颜色标识不同的状态。
2 按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间)
3 最好有一个 倒带 / 回滚 的键, 让用户可以看清楚关键的几步。
设计思想:
本次实现可视化的过程中在如何输出目前最大子数组和是由哪几个数组元素组成出现了较大问题。
源代码:
import java.util.Scanner; public class sum02 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("请输入数组的长度为:"); int n=sc.nextInt(); int[] c = new int[n]; System.out.println("请输入"+n+"个整数"); for(int i=0;i<n;i++) { c[i] = (int) sc.nextLong(); } int f=0;//定义整形变量f,为子数组最大值 int sum=0;//定义整形变量sum,为子数组求和 int p=1; for(int i=0;i<n;i++) { System.out.println("当前为第"+p+"步"); int s=sum; sum = sum+c[i]; System.out.println("此时的数据相加过程为:数组中的第"+(i+1)+"个数字与已有的sum值相加"); if(sum < 0) { sum=0; //System.out.println("判断sum值是否小于0,小于0,则sum变为初值0"); } if(sum > f) { f = sum; System.out.println("此时子数组最大和为:"+f); } System.out.println("此时已经检验"+p+"个数组元素"); p++; } if(sum == 0) { for(int i=0;i<n;i++) { System.out.println("当前为第"+p+"步"); if(i == 0) { f = c[i]; } if(f < c[i]) { f = c[i]; } } } System.out.println("该数组的子数组之和的最大值为:"+f); } }