• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
闲晴
博客园    首页    新随笔    联系   管理    订阅  订阅
课堂练习&课下作业

设计思路:从第一个数开始陆续相加,若遇到负数,则用之前相加数的和与该负数进行比较,若两数相加之后数值大于零,则使两数相加进行后继运算,若小于零,则从负数的后一位开始新的运算,在此过程中,用一个参数记录每次运算后的最大值。

出现的问题:没有出现问题。在我看来缺陷就是没能同时把子数组输出。

解决方案:在进行运算和记录最大值的同时记录数组的下标。

源代码:

import java.util.*;

public class ArrayMax {
    public static void main(String args[])
    {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入数组的长度:");
        int n = input.nextInt();
        
        int array[] = new int[n];
        System.out.print("请输入数组:");
        for(int i=0;i<n;i++)
        {
            array[i] = input.nextInt();
        }
        
        int sum = 0;
        int max = 0;
        for(int i=0;i<n;i++)
        {
            if(array[i]>=0)
            {
                sum = sum + array[i];
            }
            else
            {
                if(sum+array[i]>0)
                {
                    sum = sum + array[i];
                }
                else
                {
                    sum = 0;
                }
            }
            
            if(sum>max)
            {
                max = sum;
            }
        }
        System.out.println("所有子数组的和的最大值为:"+max);
    }
}

结果截图:

这是一个特殊情况,因为输出的是储存的最大值,所以就算最后几位都是负数,用该方法也能正确输出结果。

posted on 2016-04-07 22:06  闲晴  阅读(139)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3