单步调试及回滚测试

首先来看一下代码,

 1 package classTestTwo;
 2 
 3 import java.util.Scanner;
 4 
 5 public class One {
 6 
 7     @SuppressWarnings({ "resource", "unused" })
 8     public static void main(String[] args) {
 9         Scanner sc=new Scanner(System.in); 
10         //定义数组长度和数组
11         //输入数组长度
12         System.out.println("请输入数组的长度:");
13         int size=sc.nextInt();
14         int a[]=new int[size];
15         int sum=0;
16         int curr=0;
17         
18         
19         //输入数组的内容
20         System.out.println("请输入数组内容:");
21         for(int i=0;i<size;i++) {
22             a[i]=sc.nextInt();
23         }
24         System.out.println("单步调试:");
25         
26         //有负有正
27         for(int i=0;i<size;i++) {
28             curr=curr+a[i];
29             if(curr<0) {
30                 curr=0;
31             }else {
32                 if(sum<curr) {
33                     sum=curr;
34                 }
35             }
36             System.out.println("当前为第"+(i+1)+"步,"+"最大值为:"+sum);
37             System.out.println("当前检查了"+(i+1)+"个元素。");
38             System.out.println("一共检查了"+(i+1)+"组。");
39             System.out.println("按任意键以继续。");
40             int check=0;
41             check=sc.nextInt();
42            
43         }
44         System.out.println("单步调试结束!最大值为:"+sum);
45         //回滚
46         System.out.println("回滚调试,回滚位置:");
47         int num=sc.nextInt();
48         int curr2=0;
49         for(int i=num-1;i<size;i++) {
50              for(int j=0;j<i;j++) 
51              {
52                  curr2=curr2+a[i];
53                  if(curr2<0) {
54                      curr2=0;
55                  }else {
56                      if(sum<curr2) {
57                          sum=curr2;
58                      }
59                  }
60              }
61             System.out.println("当前为第"+(i+1)+"步,"+"最大值为:"+sum);
62             System.out.println("当前检查了"+(i+1)+"个元素。");
63             System.out.println("一共检查了"+(i+1)+"组。");
64             System.out.println("按任意键以继续。");
65 //            int check=0;
66 //            check=sc.nextInt();
67         }
68         //若全是是负数
69         if(sum==0) {
70             int sum1=a[0];
71             for(int i=0;i<size-1;i++) {
72                 if(sum1>a[i+1]) {
73                     //sum1不变
74                 }
75                 else {
76                     sum1=a[i+1];
77                 }
78             }
79             sum=sum1;
80             System.out.println("当前最大"+sum);
81         }
82         
83 
84     }
85 
86 }

这个代码是比较精简的,因为他的复杂度是O(n),这是在网上找到的比较经典的例子,也是比较容易看懂的。

再来说一下我的单步调试的思路,这个主要是在每一个for循环加上一个中止的因素,这个我添加的就是一个输入任意键,比较容易实行,主要是因为理解起来有一定的难度,所以开始不知道在干嘛。

然后是回滚调试,在理解了单步调试后,加上老师一遍又一遍的解释,不厌其烦地解释,费死劲的解释下,知道回滚是干嘛的了,然后写起来就很简单了,在单步调试后,再加入一个输入回滚位置的语句,得到回滚位置,再从回滚位置重来一遍(不包含单步调试),当然还要清空sum的值,或者再找一个替换他的位置。

这就ok了。

原文地址:https://www.cnblogs.com/msdog/p/10770986.html