zoukankan      html  css  js  c++  java
  • 软件工程个人作业04

    设计思想

    用户设定数组长度及其数值,定义sum的初值为0,max初值为数组第一个数,所求子数组的初始位置为0,进行一次遍历,sum依次与数组的数叠加,若和为正数,则证明目前的子数组之和为最大。若和为负数,则记此位置为startIndex,即记录下一个位置的数,当sum大于max时,给max赋值,记此位置为endIndex,如此进行一次循环即可。

    出现的问题

    用户输入数组数值可能会越界

    可能的解决方案(多选)

    判断用户输入数的个数,错误时重新输入。

    源代码

    import java.util.Scanner;
    public class Submax {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in = new Scanner(System.in);
            System.out.println("please input the number of the array date");
            int a=in.nextInt();
            int []date=new int[a];
            System.out.println("input the number (Int):");
            for(int i=0;i<a;i++)         //用户输入数字
            {
                date[i]=in.nextInt();
            }
            int sum=0,max=date[0];
            int startIndex=0,endIndex=0;
            for(int i=0;i<a;i++)        //进行一次遍历
            {
                if(sum>=0)
                {
                    sum+=date[i];         //和为正数时一直相加
                }
                else
                {
                    sum=date[i];
                    startIndex=i;         //和为负数时记录下一个数
                }
                if(sum>max)
                {
                    max=sum;
                    endIndex=i;            //求最大值
                }
            }
            System.out.println("the max subarray is:");
            for(int i=startIndex;i<=endIndex;i++)
            {
                System.out.println(date[i]+"  ");//输出子数组
            }
            System.out.println("the max is:"+max);
        }
    
    }

    结果截图

    总结

    许多看起来很难的程序也会有简单的解决之道,需勤动手动脑。

  • 相关阅读:
    IE下的异步JS测试
    使用P3P实现 跨域共享Cookie
    DataRow的泛型扩展方法
    我的Exec方法
    原创:截取HttpResponse输出流
    SWT/JFACE 第五天,常用组件
    导入数据库:DMP
    JAVA常见错误收集
    swtjface学习第二天
    项目管理过程之项目团队
  • 原文地址:https://www.cnblogs.com/love528/p/5368991.html
Copyright © 2011-2022 走看看