课堂测试(数组断点查询)

       本次测试主要是根据以前的求数组中最大子数组和改编,要求实现像断点查询的效果。

       本人实验的思路是:在每次循环的过程中打印出计算了哪几个子数组的和,通过用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);    
    }
}

 

posted on 2019-04-25 19:39  打篮球的Curry  阅读(216)  评论(0编辑  收藏  举报