单步调试是在输出代码块中加入条件语句,首次运行输入的如果是非数字,则顺序执行

如果输入的是不超过当前执行次数的整数时实现回滚

如果输入的整数超过当前执行次数,出现提示,此时无论输入任何类型数据,都会顺序执行

回滚功能:将执行的次数和执行该次数时对应子数组的起始位置,以及到当前执行次数为止的子数组最大值和所有子数组的和实现一对多的对应关系
代码中是temp和j,i,sum,all对应
在一个duiying类中实现。
package SHUZU;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
class duiying{
int x,y,sum;
List<Integer> all;
public List<Integer> getAll() {
return all;
}
public void setAll(List<Integer> all) {
this.all = all;
}
public duiying(int x1,int y1,int sum1,List<Integer> a)
{
x=x1;
y=y1;
sum=sum1;
all=new ArrayList<Integer>(a);
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
public class shuzu {
public static void main(String[] args) {
// WriterFun();
List<Integer> shuzu=new ArrayList<Integer>();
int a[]=new int[10];
Scanner input=new Scanner(System.in);
for(int i=0;i<=9;i++)
{
a[i]=input.nextInt();
shuzu.add(a[i]);
}
List<duiying> dy=new ArrayList<duiying>();
int temp=1;
for(int j=-1;j<=(shuzu.size()-2);j++)
{
int sum=0,back;
for(int i=j+1;(i<=shuzu.size()-1);i++)
{
if(input.hasNextInt())
{
back=input.nextInt();
if(back>(temp-1))
{
System.out.println("输入有误!(超出回滚范围,继续顺序执行)");
}
else
{
temp=back;
j=dy.get(temp-1).getX();
i=dy.get(temp-1).getY();
all=dy.get(temp-1).getAll();
sum=dy.get(temp-1).getSum();
}
}
else
{
input.next();
}
dy.add(new duiying(j,i,sum,all));
sum=sum+shuzu.get(i);
System.out.print("当前已检查到第"+temp+"个子数组"+" ");
System.out.print("由第"+(j+2)+"个到第"+(i+1)+"个元素组成"+" ");
temp++;
all.add(sum);
Collections.sort(all);
System.out.print("当前最大子数组的和:");
System.out.println(all.get(all.size()-1));
}
}
input.close();
}
}
来源:https://www.cnblogs.com/janeszj/p/10770580.html