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


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

           本人实验的思路是:在每次循环的过程中打印出计算了哪几个子数组的和,通过用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);    
        }
    }
  • 相关阅读:
    ATHEROS: ART分区中的数据解析
    提问的智慧<转自chinaunix>
    <转>使用valgrind检查内存问题
    openwrt 文件系统加载分析
    openwrt启动脚本分析
    突发奇想20150126
    Openwrt netifd ubus解析
    <转>如何调试makefile
    openwrt拆离dl目录和toolchain的方法
    建立Go工作环境
  • 原文地址:https://www.cnblogs.com/qianmo123/p/10770479.html
Copyright © 2020-2023  润新知