首页 > web前端 > js教程 > 正文

从二维数组行中计算正数之和并生成新数组的教程

花韻仙語
发布: 2025-09-24 15:34:32
原创
343人浏览过

从二维数组行中计算正数之和并生成新数组的教程

本教程详细阐述了如何从二维数组(矩阵)的每行中提取并计算所有正元素的总和,最终生成一个包含这些行总和的新数组。文章重点分析了常见的编程陷阱,如不正确的累加器初始化和循环边界设置,并提供了优化的JavaScript代码示例,确保准确无误地实现目标功能,提升代码的健壮性与可读性。

理解任务目标

我们的目标是处理一个二维数组(或称为矩阵),并为它的每一行创建一个正数之和。例如,如果有一个矩阵 [[1, -2, 3], [-4, 5, -6], [7, 8, -9]],我们希望得到一个新数组,其中包含 [1+3, 5, 7+8],即 [4, 5, 15]。这要求我们遍历矩阵的每一行,并在每行中识别并累加所有大于零的元素。

常见陷阱与错误分析

在实现上述功能时,开发者常会遇到两个主要问题,导致计算结果不准确。原始代码中的错误即是典型的示例:

  1. 累加器初始化错误: 原始代码将每行的正数和 posSum 初始化为该行的第一个元素 myArray[i][0]。

    let posSum = myArray[i][0]; // 错误:如果第一个元素是负数,则累加器将从负值开始
    登录后复制

    如果 myArray[i][0] 是一个负数(例如 -5),那么 posSum 就会从 -5 开始累加。即使后续所有正数都被正确添加,最终结果也会因为这个负的起始值而变得不正确,因为它实际上包含了这个负数。而我们的目标是只计算“正数”之和。

  2. 内层循环边界错误: 原始代码的内层循环从索引 j = 1 开始遍历。

    for (let j = 1; j < myArray.length; j++) { // 错误:跳过了每行的第一个元素
      if (myArray[i][j] > 0) {
        posSum += myArray[i][j];
      }
    }
    登录后复制

    这意味着该行的第一个元素 myArray[i][0] 会被完全跳过,不会参与到后续的 if (myArray[i][j] > 0) 判断中。这进一步加剧了问题:如果 myArray[i][0] 是一个正数,它也不会被计入总和。

这些错误共同导致了即使行中存在正数,也可能因为负的起始值或元素被跳过而无法得到正确的正数之和。

怪兽AI数字人
怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44
查看详情 怪兽AI数字人

正确的实现方法

为了避免上述问题,我们需要对代码进行两项关键修正:

  1. 将累加器初始化为零: 在计算每行的正数和之前,始终将用于累加的变量(例如 posSum)初始化为 0。这样可以确保我们的计算总是从一个中性值开始,只累加明确的正数。
  2. 确保内层循环覆盖所有元素: 内层循环应从索引 0 开始,遍历该行的所有元素,以确保每个元素都有机会被检查是否为正数并被累加。

下面是修正后的JavaScript代码示例:

<!DOCTYPE html>
<html>
<head>
    <title>从矩阵行中计算正数之和</title>
</head>
<body>
    <div id="result-container"></div>
    <script>
        // 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 < myArray[i].length; j++) { // 内层循环遍历列
                // 检查当前元素是否为正数
                if (myArray[i][j] > 0) {
                    posSum += myArray[i][j]; // 如果是正数,则累加
                }
            }
            F.push(posSum); // 将当前行的正数和添加到结果数组F
        }

        // 5. 打印结果数组到控制台和HTML页面
        console.log("每行正数之和数组 (F):");
        console.log(F);

        // 将结果输出到HTML页面
        let outputHtml = `<h3>原始二维数组:</h3><pre>${JSON.stringify(myArray, null, 2)}</pre>`;
        outputHtml += `<h3>每行正数之和数组 (F):</h3><pre>${JSON.stringify(F, null, 2)}</pre>`;
        document.getElementById('result-container').innerHTML = outputHtml;
    </script>
</body>
</html>
登录后复制

代码解析与注意事项

  • 初始化 myArray: 代码首先创建了一个 3x3 的二维数组 myArray,并用 -9 到 10 之间的随机整数填充它,这有助于模拟各种正负数混合的场景。
  • 外层循环 (for (let i = 0; i < myArray.length; i++)): 此循环负责遍历 myArray 的每一行。myArray.length 获取的是行的数量。
  • 累加器 posSum 的初始化 (let posSum = 0;): 这是解决第一个错误的关键。在处理每一行之前,posSum 都会被重置为 0,确保每行的计算都是独立的,且只从零开始累加正数。
  • 内层循环 (for (let j = 0; j < myArray[i].length; j++)): 这是解决第二个错误的关键。此循环从 j = 0 开始,确保检查该行中的所有元素。myArray[i].length 获取的是当前行的列数。
  • 条件判断 (if (myArray[i][j] > 0)): 只有当元素严格大于 0 时,才将其添加到 posSum 中。
  • 结果收集 (F.push(posSum);): 每行处理完毕后,将该行的 posSum 添加到结果数组 F 中。
  • 输出: 结果会同时打印到浏览器的控制台和HTML页面的 result-container 元素中,便于查看和验证。

总结

正确地从二维数组的每行中计算正数之和,关键在于两点:一是确保累加器在每次计算新行之前都正确地初始化为 0;二是确保内层循环完整地遍历了该行的所有元素,从索引 0 开始。遵循这些原则,可以避免常见的逻辑错误,并编写出健壮、准确的代码。这种严谨的初始化和循环控制策略,在处理任何累加或统计任务时都至关重要。

以上就是从二维数组行中计算正数之和并生成新数组的教程的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号