
本教程详细阐述了如何从二维数组(矩阵)的每行中提取并计算所有正元素的总和,最终生成一个包含这些行总和的新数组。文章重点分析了常见的编程陷阱,如不正确的累加器初始化和循环边界设置,并提供了优化的JavaScript代码示例,确保准确无误地实现目标功能,提升代码的健壮性与可读性。
理解任务目标
我们的目标是处理一个二维数组(或称为矩阵),并为它的每一行创建一个正数之和。例如,如果有一个矩阵 [[1, -2, 3], [-4, 5, -6], [7, 8, -9]],我们希望得到一个新数组,其中包含 [1+3, 5, 7+8],即 [4, 5, 15]。这要求我们遍历矩阵的每一行,并在每行中识别并累加所有大于零的元素。
常见陷阱与错误分析
在实现上述功能时,开发者常会遇到两个主要问题,导致计算结果不准确。原始代码中的错误即是典型的示例:
累加器初始化错误:原始代码将每行的正数和 posSum 初始化为该行的第一个元素 myArray[i][0]。
let posSum = myArray[i][0]; // 错误:如果第一个元素是负数,则累加器将从负值开始
如果 myArray[i][0] 是一个负数(例如 -5),那么 posSum 就会从 -5 开始累加。即使后续所有正数都被正确添加,最终结果也会因为这个负的起始值而变得不正确,因为它实际上包含了这个负数。而我们的目标是只计算“正数”之和。
内层循环边界错误:原始代码的内层循环从索引 j = 1 开始遍历。
for (let j = 1; j 0) { posSum += myArray[i][j]; }}
这意味着该行的第一个元素 myArray[i][0] 会被完全跳过,不会参与到后续的 if (myArray[i][j] > 0) 判断中。这进一步加剧了问题:如果 myArray[i][0] 是一个正数,它也不会被计入总和。
这些错误共同导致了即使行中存在正数,也可能因为负的起始值或元素被跳过而无法得到正确的正数之和。
正确的实现方法
为了避免上述问题,我们需要对代码进行两项关键修正:
将累加器初始化为零: 在计算每行的正数和之前,始终将用于累加的变量(例如 posSum)初始化为 0。这样可以确保我们的计算总是从一个中性值开始,只累加明确的正数。确保内层循环覆盖所有元素: 内层循环应从索引 0 开始,遍历该行的所有元素,以确保每个元素都有机会被检查是否为正数并被累加。
下面是修正后的JavaScript代码示例:
从矩阵行中计算正数之和 // 1. 初始化一个3x3的二维数组 let myArray = []; const rows = 3; const cols = 3; for (let i = 0; i < rows; i++) { myArray[i] = []; for (let j = 0; j < cols; j++) { // 填充随机数,范围从-9到10 myArray[i][j] = Math.floor(Math.random() * 20 - 10) + 1; } } // 2. 打印原始数组到控制台,以便对照 console.log("原始二维数组 (myArray):"); console.log(myArray); // 3. 用于存储每行正数之和的数组 let F = []; // 4. 遍历二维数组的每一行 for (let i = 0; i < myArray.length; i++) { // 外层循环遍历行 // 关键修正1: 每行的正数和累加器必须初始化为0 let posSum = 0; // 关键修正2: 内层循环必须从索引0开始,遍历该行的所有元素 for (let j = 0; j 0) { posSum += myArray[i][j]; // 如果是正数,则累加 } } F.push(posSum); // 将当前行的正数和添加到结果数组F } // 5. 打印结果数组到控制台和HTML页面 console.log("每行正数之和数组 (F):"); console.log(F); // 将结果输出到HTML页面 let outputHtml = `原始二维数组:
${JSON.stringify(myArray, null, 2)}
`; outputHtml += `
每行正数之和数组 (F):
${JSON.stringify(F, null, 2)}
`; document.getElementById('result-container').innerHTML = outputHtml;
以上就是从二维数组行中计算正数之和并生成新数组的教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1522480.html
微信扫一扫
支付宝扫一扫