• 返回一个整数数组中最大子数组的和


    问题描述:

    设计思想:

    首先,此个小程序我会用一个另外的类来完成主要求和。类中第一个方法就是输入,输入数组的长度和数组内的数据;第二个方法来完成子数组求和,首先最大数赋值为数组最后一个数,然后我用while语句循环遍历一次数组算出结果,其中处理过程为:遍历的数如果是正数,首先判断前一个数是否为正,正加上前一个数赋值给此数,然后判断次数是否大于最大数;如果是负数,然后判断是否大于最大数,大则赋值给最大数,否则就加上前一个数赋值给次数。依次循环完毕输出。

    出现的问题:

    大致写完求和方法后,不能输出结果。调试发现:负数情况下,少考虑了负数不大于最大值的可能。第二次发现有一个bug,比如8 9 -1 2 3的最大值则是17,应该是21

    可能的解决方案(多选):

    遍历时如果为负数,则要加上前一个数,这样才能避免上面出现的bug

    源代码:

    //课堂测试
    //范亚雷 2016.04.05
    //import javax.swing.JOptionPane;
    import java.util.*;
    class Maxout{
        int[] list=new int[10];
        int max;
        int length;
        Maxout(){}
        
        public void Input(){
            System.out.println("请输入数组的长度:");
            Scanner a=new Scanner(System.in);
            length=a.nextInt();
            Scanner     sca=new Scanner(System.in);
            System.out.println("请依次数组内的数:");  //输入
            for(int i=0;i<length;i++)
            {
                list[i]=sca.nextInt();
            }
            if(length==0||length<0)   //数组为0,报错
            {System.exit(0);}
            
            max=list[length-1];
            //System.out.println(max);
        }
        
       public void Largest(){    //求最大子数组和
        
        while(length>1){
        
       if(list[length-2]>=0)
        {
           
           if(list[length-1]>=0)
            {
                list[length-2]=list[length-2]+list[length-1];
                //System.out.println("1:"+max);
                //Largest();
            }
            
            if(list[length-2]>=max)
            {
                max=list[length-2];
                //System.out.println("2:"+max);
                length--;
                    //Largest();
            }
            else
            {length--;}
        }
        
       else
        {
            if(list[length-2]>=max)
            {
                max=list[length-2];
                //System.out.println("4:"+max);
                length--;
                //Largest();
            }
            else
            {
                list[length-2]=list[length-2]+list[length-1];
                length--;
            }
          }
        }    
        
        if(length<2)
          {
            System.out.println("子数组的和最大为为:" + max); //输出max
          }
      }
       
    }
    
     public class OutMax {
        public static void main(String[] args){
            Maxout m=new Maxout();
            m.Input();
            m.Largest();
        }
    }

    结果截图:

    总结:

    此次编写,出现来了各种可能出现的情况没有考虑充分,对于各种情况的处理分析不够,导致编写的方法不太正确,出现了小问题。因此在编写程序时,要分析清楚各种可能的出现,再去进行编写。

  • 相关阅读:
    面试题
    iOS 两种方法实现左右滑动出现侧边菜单栏 slide view
    进程、线程、多线程相关总结
    iOS开发
    播放 视频
    delphi控件属性大全-详解-简介
    Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值
    FastReport 使用说明
    delphi的取整函数round、trunc、ceil和floor
    cxGrid 速度
  • 原文地址:https://www.cnblogs.com/fan-xiaofan/p/5363985.html
Copyright © 2020-2023  润新知