用户需求&功能介绍
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; } }
以及运行截图