本次测试主要是根据以前的求数组中最大子数组和改编,要求实现像断点查询的效果。
本人实验的思路是:在每次循环的过程中打印出计算了哪几个子数组的和,通过用if语句改变循环变量i的值然后实现回滚、下一步或自动。
总结:这次实验做的慢,主要原因是对自己写的代码不是百分之百的了解,并不能够具体到每一次循环,其次是对if语句缺少练习。if语句用的是非常广泛,通过这次实验必须要学会多运用if语句。
本次实验的代码如下:
package xxx; import java.util.Scanner; public class Test { public static void max(int n) { @SuppressWarnings("resource") Scanner scanner=new Scanner(System.in); //进行判断 if(n>1) { int[]c=new int[2*n-1]; System.out.println("输入数组元素:"); for(int i=0;i<n;i++) { c[i]=scanner.nextInt(); } //求出数组中的最大值 int p=0; int max=c[0]; for(int i=0;i<n;i++) { if(c[i]>max) { max=c[i]; p=i; } } //求最大子数组(借用百度的思想) int MaxSum=max; // System.out.println("已检查1个"+" 当前最大子数组的和为:"+MaxSum+" 数组下标为:"+p); int Sum=0; int t=0; int m=0; for(int i=0;i<n;i++) { Sum+=c[i]; if(Sum>MaxSum) { MaxSum=Sum; System.out.println("已检查"+(i-t+1)+"个"+" 当前最大子数组的和为:"+MaxSum+" 数组下标:"+t+"-"+i); } else System.out.println("已检查"+(i+1)+"个"+" 当前最大子数组的和为:"+MaxSum+" 数组下标为:"+p); if(Sum<0) { if(i>0) { Sum=0; t=i+1; } } if(m!=3) { //进行模式判断 System.out.println("1 回滚 、2下一步、3自动"); int q=scanner.nextInt(); if(q==1) { System.out.println("请输入回退到第几步(1~"+(i+1)+")"); q=scanner.nextInt(); i=q-2; Sum=0; System.out.println(q); if(q>1) for(int j=0;j<q-1;j++) { Sum=Sum+c[j]; if(Sum<0) Sum=0; } MaxSum=max; System.out.println(Sum+" "+i); } else if(q==3) m=3; System.out.println(m); } } } } public static void main(String [] args) { //输入数组 int n; System.out.print("数组元素个数:"); @SuppressWarnings("resource") Scanner scanner=new Scanner(System.in); n=scanner.nextInt(); max(n); } }