Java静态方法实现交替加乘运算求助(禁用取模)
问题分析与解决方案
原代码核心问题
- 冗余的双层循环:外层循环仅执行一次就被
break终止,内层循环遍历所有后续元素,导致逻辑混乱,计算结果完全不符合预期。 - 错误的操作逻辑:没有正确理解“交替加乘”的运算规则,错误地将第一个元素与所有后续元素重复执行加/乘操作,而非按顺序处理相邻元素的交替运算。
正确实现代码
根据你给出的示例规则([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)); } }
代码逻辑说明
- 边界处理:先判断列表是否为空或
null,直接返回0;若列表仅有一个元素,直接返回该元素值。 - 状态跟踪:用
waitingForMultiply布尔变量替代取模运算,标记当前是否需要等待下一个元素进行相乘操作:- 初始状态为
false,遇到第一个后续元素时,先记录该元素,切换为等待相乘状态。 - 处于等待状态时,遇到下一个元素就执行相乘操作,将乘积加到结果中,再切换回初始状态。
- 初始状态为
- 收尾处理:若列表长度为偶数,循环结束时会有一个未配对的元素,直接将其加到结果中。
内容的提问来源于stack exchange,提问作者direeX
相关产品推荐
相关产品推荐

