
理解需求:矩阵行正数求和
在数据处理和算法实现中,我们经常需要对二维数组(或称为矩阵)进行操作。一个常见的任务是遍历矩阵的每一行,并计算该行中所有正数的总和,最终将这些行总和存储到一个新的数组中。例如,给定一个3x3的矩阵:
[ [ 3, -1, 5], [-2, 4, -7], [ 1, 0, 6] ]
我们期望得到的结果数组将是 [ (3+5), (4), (1+6) ],即 [8, 4, 7]。
常见的编码陷阱与分析
在尝试实现上述功能时,开发者常会遇到一些问题,导致结果不准确。主要有两个陷阱:
陷阱一:求和变量的错误初始化
许多开发者可能会将行的第一个元素作为累加器的初始值,例如:
let posSum = myArray[i][0]; // 如果 myArray[i][0] 是负数,问题就出现了
这种做法的问题在于,如果行的第一个元素(myArray[i][0])是一个负数,那么 posSum 就会以一个负值开始累加。即使后续有正数加入,最终的总和也会被这个初始的负值所影响,导致结果偏低或错误。例如,如果一行是 [-5, 2, 3],posSum 会从 -5 开始,最终得到 (-5 + 2 + 3) = 0,而不是期望的 (2 + 3) = 5。
立即学习“Java免费学习笔记(深入)”;
正确做法: 累加器(求和变量)应该始终初始化为 0,以确保从一个中立的基点开始计算。
陷阱二:循环范围的疏忽
另一个常见错误是内层循环的起始索引设置不当:
for (let j = 1; j < myArray.length; j++) { // 注意:j 从 1 开始
// ...
}这里 j 从 1 开始,这意味着 myArray[i][0](即当前行的第一个元素)会被跳过,无论它是否为正数,都不会被纳入求和。这显然会导致结果不完整或不准确。
正确做法: 内层循环应该从索引 0 开始遍历当前行的所有元素,以确保每个元素都有机会被检查和累加。
正确的实现方法
结合对上述陷阱的分析,我们可以构建一个健壮的解决方案。核心思想是:
- 外层循环: 遍历矩阵的每一行。
- 内层循环前的初始化: 在进入内层循环(处理每一行)之前,将该行的累加器(例如 rowSum)初始化为 0。
- 内层循环: 遍历当前行的所有元素(从索引 0 开始到行末)。
- 条件判断: 在内层循环中,只对大于 0 的元素执行累加操作。
- 结果收集: 将每行的 rowSum 添加到最终的结果数组中。
以下是完整的JavaScript代码示例:
矩阵行正数求和教程
JavaScript教程:从二维数组行中计算正数之和









