
在数据处理和算法实现中,我们经常需要对二维数组(或称为矩阵)进行操作。一个常见的任务是遍历矩阵的每一行,并计算该行中所有正数的总和,最终将这些行总和存储到一个新的数组中。例如,给定一个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 开始遍历当前行的所有元素,以确保每个元素都有机会被检查和累加。
结合对上述陷阱的分析,我们可以构建一个健壮的解决方案。核心思想是:
以下是完整的JavaScript代码示例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>矩阵行正数求和教程</title>
<style>
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; margin: 20px; background-color: #f4f4f4; color: #333; }
pre { background-color: #eee; padding: 15px; border-radius: 5px; overflow-x: auto; }
h3 { color: #0056b3; }
#result-container { margin-top: 20px; padding: 15px; border: 1px solid #ccc; background-color: #fff; border-radius: 5px; }
</style>
</head>
<body>
<h1>JavaScript教程:从二维数组行中计算正数之和</h1>
<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;
}
}
console.log("原始矩阵:", myArray); // 在控制台输出原始矩阵
// 2. 核心求和逻辑:计算每行正数之和
let F = []; // 用于存储每行正数之和的新数组
for (let i = 0; i < myArray.length; i++) { // 遍历矩阵的每一行
let rowSum = 0; // **关键:为每行初始化求和变量为0**
// 遍历当前行中的所有元素
// myArray[i].length 确保我们遍历的是当前行的实际长度,而非固定值
for (let j = 0; j < myArray[i].length; j++) { // **关键:从索引0开始遍历行中的所有元素**
if (myArray[i][j] > 0) { // **关键:只累加大于0的正数**
rowSum += myArray[i][j];
}
}
F.push(rowSum); // 将当前行的正数和添加到结果数组 F
}
console.log("每行正数之和数组 F:", F); // 在控制台输出结果数组
// 3. 在HTML页面上显示结果
document.getElementById('result-container').innerHTML = `
<h3>原始矩阵:</h3>
<pre>${JSON.stringify(myArray, null, 2)}</pre>
<h3>每行正数之和数组 F:</h3>
<pre>${JSON.stringify(F)}</pre>
`;
</script>
</body>
</html>从二维数组(矩阵)的行中计算正数之和是一个常见的编程任务。通过本教程,我们深入探讨了两个主要的编码陷阱:累加器初始化不当和循环范围错误。通过将累加器初始化为 0,并确保内层循环遍历行中的所有元素,我们可以构建一个准确且高效的解决方案。掌握这些基本原则对于编写健壮和可靠的JavaScript代码至关重要。
以上就是JavaScript教程:从二维数组(矩阵)行中高效计算正数之和的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号