单步查询--数组续

用户需求&功能介绍

1. 用户用你的程序读入一个数组文件 (就像我们以前做过的那样),显示初始状态 (就像围棋打谱程序那样)

 1.1. 用户也可以自行定义数组的大小,或者要求随机生成一个数字矩阵。

2. 用户这时候有两个选择

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

 2.2  按 自动运行 键, 在 GUI 看到程序自动运行,并自动显示过程, 每次改变状态的时候要稍作停留 (例如 1 秒钟的时间)

3.  这时最好有一个 倒带 / 回滚 的键, 让用户可以看清楚关键的几步。

(当然,用户可以选择是普通模式还是扩展定义的连通模式)

  

以上是老师所描述的用户需求

我认为,这个东西很简单

首先调出原来的程序代码,由于重装电脑,需要重新在控制台设置,import。

然后根据我的想法我仅仅插入了一些输出代码,以及定义了一个定义。

{        System.out.print("当前是第"+i+""+"已检查"+i+"个数组");
          System.out.println();
          System.out.print("最大子数组之和是"+max);
          System.out.println();
          if (sum=sum1)
                  {
              System.out.print("这个数组是从第"+1+"组到第"+i+"");
                  }
          System.out.print("这个数组是从第"+1+"组到第"+i+"");
          System.out.println();
          System.out.print("当前计算到的临时子数组是"+array[i]);
          System.out.println();
          System.out.println();
          //组成这个子数组的是“”
          //当前已查看子数组有“”
      }
      System.out.println();
      System.out.print("最大子数组之和为:");
      return max;    

然后我现在只能实现第一个,全部导出,无法进行回滚。不会滚。

其他的东西需要进一步的思考,研究,目前就这样了。以下是这个的完整代码

//这段代码不能说是出自我手,毕竟是参考了一个网上的教程后才能写出来的,最开始我是万万写不出来的,还需要加油。
package zhengxingshuzu;

public class Zxsz {
  public static void main(String[] args) {
      // TODO Auto-generated method stub
    int array[] = {0,1,-6,3,-5,7,1,-9,5,10,5,-10,-5,-1,5,-5,-1,2,-1,-6};
    System.out.println(findMax(array));
  }
  public static int findMax(int array[]){
      //加上约束条件,防止当数组为空时造成数组越界
      if (array.length == 0) {
          return 0;
      }
      int max = array[0];
      int sum = 0;
      //int sum1=array[i-1];
      for(int i=1; i<array.length; i++){
          //如果加上某个元素sum>=0的话,就加;
          if(sum >= 0) {
              sum += array[i];
          }
          //当数组全为负数的时候只要有加法就一定比原来的数小,此时就相当于找出数组内最大的数
          else{
              sum = array[i]; //否则从当前位置重新计算
          }
          if(sum > max){
              max = sum;
          }
          System.out.print("当前是第"+i+""+"已检查"+i+"个数组");
          System.out.println();
          System.out.print("最大子数组之和是"+max);
          System.out.println();
         // if (sum=sum1)
        //          {
            //  System.out.print("这个数组是从第"+1+"组到第"+i+"组");
                //  }
          System.out.print("这个数组是从第"+1+"组到第"+i+"");
          System.out.println();
          System.out.print("当前计算到的临时子数组是"+array[i]);
          System.out.println();
          System.out.println();
          //组成这个子数组的是“”
          //当前已查看子数组有“”
      }
      System.out.println();
      System.out.print("最大子数组之和为:");
      return max;
  }
}

以及运行截图

原文地址:https://www.cnblogs.com/kmxbf2292/p/10770452.html