• 单步调试及回滚测试


    首先来看一下代码,

     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了。

  • 相关阅读:
    Java
    Spring
    Q&A
    Q&A
    Q&A
    Spring
    Elasticsearch部署及基本概念
    rust(二) 变量及类型
    rust(一) 一些命令
    vim笔记
  • 原文地址:https://www.cnblogs.com/msdog/p/10770986.html
Copyright © 2020-2023  润新知