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

Java静态方法实现交替加乘运算求助(禁用取模)

问题分析与解决方案

原代码核心问题

  1. 冗余的双层循环:外层循环仅执行一次就被break终止,内层循环遍历所有后续元素,导致逻辑混乱,计算结果完全不符合预期。
  2. 错误的操作逻辑:没有正确理解“交替加乘”的运算规则,错误地将第一个元素与所有后续元素重复执行加/乘操作,而非按顺序处理相邻元素的交替运算。

正确实现代码

根据你给出的示例规则([1,2,3,4,5]计算结果为1 + 2*3 +4*5 =27),以下是满足要求的实现,全程未使用取模%运算符判断索引奇偶:

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Exercise {
    static int addAndMultiply(List<Integer> list) {
        // 处理空列表或null的边界情况
        if (list == null || list.isEmpty()) {
            return 0;
        }
        int result = list.get(0);
        // 用布尔变量标记是否处于待配对相乘的状态
        boolean waitingForMultiply = false;
        int tempNum = 0;

        for (int i = 1; i < list.size(); i++) {
            if (!waitingForMultiply) {
                // 记录当前元素,等待下一个元素进行相乘
                tempNum = list.get(i);
                waitingForMultiply = true;
            } else {
                // 执行相乘操作并加到结果中,重置状态
                result += tempNum * list.get(i);
                waitingForMultiply = false;
            }
        }

        // 处理列表长度为偶数的情况:最后一个未配对的元素直接加到结果
        if (waitingForMultiply) {
            result += tempNum;
        }

        return result;
    }

    public static void main(String[] args) {
        List<Integer> numbers = new LinkedList<>();
        Collections.addAll(numbers, 1, 2, 3, 4, 5);
        // 输出结果为27,符合示例要求
        System.out.println(Exercise.addAndMultiply(numbers));
    }
}

代码逻辑说明

  1. 边界处理:先判断列表是否为空或null,直接返回0;若列表仅有一个元素,直接返回该元素值。
  2. 状态跟踪:用waitingForMultiply布尔变量替代取模运算,标记当前是否需要等待下一个元素进行相乘操作:
    • 初始状态为false,遇到第一个后续元素时,先记录该元素,切换为等待相乘状态。
    • 处于等待状态时,遇到下一个元素就执行相乘操作,将乘积加到结果中,再切换回初始状态。
  3. 收尾处理:若列表长度为偶数,循环结束时会有一个未配对的元素,直接将其加到结果中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:50:23