You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现windowPosSum数组窗口正元素求和函数问询

windowPosSum函数实现修正

你现有代码存在几个逻辑错误,无法满足需求:

  • 函数定义为无返回值void类型,原代码写了return(sum)属于语法错误,Java数组是引用传递,直接修改传入数组的元素即可,不需要返回计算结果
  • 没有做正数判断逻辑,按照要求负数元素不需要做任何替换
  • 没有处理数组索引越界问题,当遍历到数组末尾时,i+n可能超出数组最大索引,会直接抛出运行时异常
  • 求和逻辑错误:每个位置的窗口和是独立计算的,不能用全局变量跨位置累加,否则会混入其他窗口的数值

正确实现逻辑

按照需求拆分实现步骤即可:

  1. 外层循环遍历数组的每一个索引位
  2. 遇到当前位置值小于等于0的情况,直接跳过进入下一轮循环
  3. 对正数元素,从当前索引开始向后累加最多n+1个元素(窗口范围是当前元素到当前元素后第n个,共n+1个值)
  4. 内层累加时如果索引超出数组长度,立刻终止累加
  5. 把累加得到的和赋值回当前索引位,完成替换

完整可运行代码如下:

public class BreakContinue {
    public static void windowPosSum(int[] a, int n) {
        for (int i = 0; i < a.length; i++) {
            // 负数直接跳过不处理
            if (a[i] <= 0) {
                continue;
            }
            int windowSum = 0;
            for (int offset = 0; offset <= n; offset++) {
                int currentIdx = i + offset;
                // 到数组末尾就停止求和
                if (currentIdx >= a.length) {
                    break;
                }
                windowSum += a[currentIdx];
            }
            a[i] = windowSum;
        }
    }

    // 示例测试
    public static void main(String[] args) {
        int[] testArr = {1, 2, -3, 4, 5, 4};
        windowPosSum(testArr, 3);
        // 输出 [4, 8, -3, 13, 9, 4],和预期结果一致
        System.out.println(java.util.Arrays.toString(testArr));
    }
}

结果验证

用题目给出的示例参数运行时,计算过程完全匹配规则:

  • i=0:累加索引0、1、2、3的值,1+2+(-3)+4=4
  • i=1:累加索引1、2、3、4的值,2+(-3)+4+5=8
  • i=2:值为-3,跳过保留原值
  • i=3:累加索引3、4、5的值,4+5+4=13(索引6超出数组长度,终止累加)
  • i=4:累加索引4、5的值,5+4=9
  • i=5:仅累加索引5的值,结果为4,和原值一致

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 22:09:18